代码之家  ›  专栏  ›  技术社区  ›  enamoria

向sys.path添加项目根目录是一个好的实践吗?

  •  2
  • enamoria  · 技术社区  · 6 年前

    我有一个关于向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,但是它远没有从终端直接调用它那么灵活。

    真想听听建议!事先谢谢。任何建议都将不胜感激!

    2 回复  |  直到 6 年前
        1
  •  3
  •   Matthew Story    6 年前

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

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

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

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

    在您的个人发展环境中,通过修改您的 bashrc 或者在您的生产环境中 init 脚本(或其他包装脚本),并在每次添加或修改项目路径时为您提供一个更新位置。

    既然您提到每个目录几乎有一个目录 .py 文件,还应该考虑如何将代码组织为 packages 以进一步简化您的设置。

        2
  •  -1
  •   Daniel    6 年前

    这不是一个特别好的练习,尽管你可以摆脱它。更好的方法是通过virtualenv(或pipenv)来实现更平滑的工作流。