关于PYTHONPATH和进口有很多类似的问题,但我找不到我需要的东西。
我有一个包含一些python帮助程序脚本的git存储库。脚本自然地组织在几个包中。就像是:
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
和b
。我在所有模块中都使用绝对导入。我跑python3 scripts/main.py
。只要我将PYTHONPATH
设置为项目的根目录,一切都有效。
但是,我想避免用户设置环境变量的麻烦。
什么是正确的方式去?我希望这在java中工作,默认情况下当前dir在classpath中,但似乎并非如此。我也试过相对导入而没有成功。
编辑:如果我删除顶级__init__.py
似乎工作
首先,你是对的,因为我认为你不需要顶级的__init__.py
。删除它并不能解决任何导入错误。
您不需要设置PYTHONPATH,我可以想到一些替代方案:
scripts
目录下。 Python会自动将脚本的目录添加到Python路径中。sys.path
变量,以便找到本地模块。第二种选择是最直接的。
第三个选项要求您在脚本顶部添加一些python代码,高于正常导入。在你的main.py
它看起来像:
#!/usr/bin/env python
import os.path, sys
sys.path.insert(0, os.path.dirname(os.path.dirname(__file__)))
import a
import b
这样做是:
sys.path