我有一个使用Python代码的仓库,其结构可以归结为:
repo_root\
tool1\
tool1.py
tool1_aux_stuff.py
tool2\
tool2.py
tool2_aux_stuff.py
lib\
lib1\
lib1.py
lib1_aux_stuff.py
lib2\
lib2.py
lib2_aux_stuff.py
以下规则适用于模块用法:
repo_root
外部的工具。问题是:如何从工具模块导入lib模块?
我知道,如果我将__init__.py
添加到每个工具和lib目录以及回购根目录,那么我将能够使用来自根目录的绝对路径,即在tool1.py
中我可以写< / p>
import lib.lib1, lib.lib2.lib2_aux_stuff
但是,如果我从随机位置执行tool1.py
,例如
machine_name: ~/random/place$ python /path/to/repo/tool1/tool1.py
我收到ModuleNotFoundError: No module named 'lib' found
错误。
我知道一种解决方法,可以使用PYTHONPATH env变量来实现,方法是使用指向repo_root
的绝对路径来扩展它,并将其提供给工具脚本的调用,即:>
machine_name: ~/random/place$ PYTHONPATH=$PYTHONPATH:/path/to/repo python /path/to/repo/tool1/tool1.py
但是我真的希望不那么笨拙。
有什么想法可以更直接地做到吗?
答案 0 :(得分:0)
使用lib
将sys.path.append('/custom/path/to/modules')
的路径添加到范围。然后,它应该可以作为模块调用。
您确实需要在要导入的任何目录中将__init__.py
文件添加为一个模块,否则Python不会将它们视为模块,您将获得另一个ImportError
< / p>