将项目根目录添加到sys.path是一种好习惯吗?

时间:2018-07-03 04:33:40

标签: python bash coding-style

我有一个关于向python添加项目路径的问题,以简化import的工作。

情况

当我用Python编写代码时,通常会使用

将必要的路径添加到sys.path
import sys
sys.path.append("/path/to/dir/") # almost every `.py` need this

有时候,当我的项目随着目录级别的增加而变大时,这种方法似乎笨重且容易出错(尤其是当我重新组织文件时)

最近,我开始使用bash脚本(位于项目根目录),该脚本将带有项目根参数的sys.path.append添加到项目中的.py文件中。使用这种方法,我几乎不必手动关心导入模块。

问题

我的问题是:这是一种好习惯吗?与旧方法相比,我觉得它很方便,但是由于bash脚本是一个单独的文件,因此我需要2条命令来运行项目中的任何脚本(一个用于bash,一个用于.py)。我可以在bash中包含调用.py的命令,但它的灵活性远不及从终端直接调用它。

真的想听听一些建议!提前致谢。任何建议将不胜感激!

2 个答案:

答案 0 :(得分:3)

在Python库或程序中使用操纵sys.path通常不是一个好习惯。您应该在python程序的调用环境中将相关路径添加到PYTHONPATH

PYTHONPATH="/path/to/other/projects/directory:$PYTHONPATH" python ...

export PYTHONPATH="/path/to/other/projects/directory:$PYTHONPATH"
python ...

这使您可以轻松地操纵程序或库将轻松地搜索依赖项的路径,而无需修改代码。

在您的个人开发环境中通过修改bashrc或在生产环境中使用init脚本(或其他包装脚本)来管理此问题也非常容易,并为您提供了一个位置每次添加或修改项目路径时更新。

鉴于您提到每个.py文件几乎都有一个目录,因此您还应该考虑如何将代码组织成packages来进一步简化设置。

答案 1 :(得分:-1)

这不是一个特别好的做法,尽管您可以摆脱它。最好还是使用virtualenv(或pipenv),以使工作流程更流畅。