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

Is adding project root directory to sys.path a good practice?

我有一个关于将项目路径添加到 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)。我可以将调用 .py 的命令包含到 bash,但它远不如直接从终端调用它灵活。

很想听听大家的意见!提前致谢。任何建议将不胜感激!

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

在 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 中以进一步简化设置。