频繁地将项目所在目录导入到sys.path有什么好处与坏处?

图片描述

如图所示,几乎每个文件中都有这几行代码(个人认为不太优雅)

  1. 有什么好处? 坏处?

  2. 如果真的要像图中那么做,更加优雅点的方法是?

PS: 之所以把该整个项目的package导入到sys.path中,主要是因为「方便使用,如同导入标准库一样」

阅读 3.8k
3 个回答

写一个config.py, 将引入环境变量的工作都放在里面.
然后, 其他的文件都import config. 其实跟你写个函数复用代码是一个意思.

这样做的好处是: 如果有一天你不想使用环境变量了, 你可以很方便的切换, 只修改config.py就好了, 而不用修改项目中的每个文件.

另一种做法是
在python的site-pcakages目录下创建一个pth文件,把PY_SRC目录放在里面,如:

#cat /usr/local/lib/python2.7/site-packages/my_project.pth 
/data/my_project

这样在这台服务器的任何目录下,都能直接import /data/my_project里面的包。

个人觉得,副作用更大些,虽然之前的这个代码已经尽量用一种优雅的方式使用自己定义的PY_SRC来做为环境变量了,看起来的唯一的好处就是对单个文件做单元测试的时候,不用频繁的操作sys.path,副作用就是交叉引用时,导致一堆的目录被引入到sys.path中,污染了全局的sys.path,更优雅一点的做法好歹是, 总体看来,还是副作用更大些

MY_PATH = "xxxx"
if My_PATH not in sys.path:
    sys.path.append(MY_PATH)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题