关于PYTHONPATH和imports有很多类似的问题,但是我没有找到我真正需要的东西。
我有一个git存储库,其中包含一些python助手脚本。脚本自然地被组织在几个包中。比如:
scripts/main.py
scripts/other_main.py
scripts/__init__.py
a/foo.py
a/bar.py
a/__init__py
b/foo.py
b/bar.py
b/__init__.py
__init__.py
scripts
依赖于a
和{python3 scripts/main.py
。只要我将PYTHONPATH
设置为项目的根目录,一切都会正常工作。
但是,我想避免用户设置环境变量的麻烦。
正确的方法是什么?我希望它能像java一样工作,默认情况下当前dir在类路径中,但事实并非如此。我也尝试过相对导入,但没有成功。
编辑:如果我删除顶层__init__.py
,它似乎可以工作
首先,你是对的,我认为你不需要顶层的
__init__.py
。删除它并不能解决我的任何导入错误。在您不需要设置PYTHONPATH,我可以考虑一些替代方法:
使用虚拟环境(https://virtualenv.pypa.io/en/latest/)。这还需要您将代码打包到一个可安装的包(https://packaging.python.org/)。我不会进一步解释这个选项,因为它与你的问题没有直接关系。
将模块移到
scripts
目录下。Python会自动将脚本的目录添加到Python路径中。修改脚本中的
sys.path
变量,以便它们可以找到本地模块。第二种选择是最直接的。在
第三个选项将要求您在脚本的顶部添加一些python代码,位于正常导入的上方。在您的
main.py
中,它看起来像:它的作用是:
获取脚本的文件名
计算脚本目录的父目录
将该目录前置到
sys.path
然后正常导入模块
相关问题 更多 >
编程相关推荐