所以我构建了几乎所有我的项目:
根/
| - 脚本/
| - src /
| - 等......
我将runnable脚本放在脚本/和src /中的可导入模块中,按照惯例从根目录运行每个脚本(所以我总是保持root用户,然后输入'python scripts / ' )
为了能够从src /导入代码,我决定用这个开始每个脚本:
import sys
import os
# use this to make sure we always have the dir we ran from in path
sys.path.append(os.getcwd())
确保root /始终位于从root运行脚本的路径中。
我的问题是:这被认为是不好的风格吗?我喜欢我总是从根目录运行脚本,并保持我的脚本与我的模块分离的约定,但总是为我编写的每个脚本编辑路径变量似乎是一个奇怪的策略。
如果这被认为是不好的风格,你能提供其他建议吗?我可以采用不同的方式保持现有的约定或建议,以便采用不同的方式来构建项目!
谢谢!
答案 0 :(得分:0)
我的建议是使用:
root/$ python -m scripts.whatever
使用-m
,您使用.
表示法而不是文件路径,因此-m
告诉Python,您不需要在每个脚本中设置路径代码开始在你调用Python的目录中查找导入。
如果您的文件结构也恰好使用setup.py
进行安装,并且可能会在site_packages
中找到,则还需要考虑其他一些事项:
-m
(如上所示),它将调用您目录中的代码-m
,它会从sys.path
找到已安装的代码并致电如果您正在运行安装了软件包的解释器并且您尝试在本地更改脚本并且无法弄清楚您的更改不存在的原因,那么这可能是一个微妙的问题。 (这发生在我的一个没有使用虚拟环境的同事身上。)