【发布时间】:2018-07-03 04:33:39
【问题描述】:
我有一个关于将项目路径添加到 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 的命令,但它远不如直接从终端调用它灵活。
真的很想听听一些建议!提前致谢。任何建议将不胜感激!
【问题讨论】:
-
这通常不是好的做法。一般不需要,因为脚本的路径已经自动添加到
sys.path。但同时,对于分发/部署,您几乎总是希望创建一个带有setuptools的pip install-able 包、一个可分发的virtualenv、一个通过PyInstaller/等的安装程序包、一个预装了您的应用程序的Docker 映像,或者别的东西,而对于本地开发,如果你不想安装--inplace,你可能想要一个设置路径的virtualenv。 -
另外,您通常不应该将脚本分散在整个项目中——绝对不是在包中,但通常即使它们不是。如果您需要大量脚本,您应该考虑创建
-m-runnable 模块或setuptools-生成的入口点脚本。 -
感谢您的回答。看来你误解了我的问题。我要问的不是将多个不同的
sys.path.append添加到不同的.py,而是将 project root 添加到sys.path到几乎每个.py并导入与添加的模块相对应的模块项目根目录。请注意,我不熟悉分发/部署包,所以也许我是在这里误解的人:D -
如果几乎每个
.py文件都需要这个,那么你可能做错了什么。 (可能是非常错误,比如将脚本放在包的中间,但可能不是。)最好的答案通常是重新安排你的项目,这样你就不需要了。这并非总是正确,但如果没有任何细节,就不可能知道您是否面临该一般规则的例外情况。
标签: python bash coding-style