我有一个带有Python代码的repo,其结构可以归结为:
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目录以及repo根目录中,那么我将能够使用根目录中的绝对路径,即在tool1.py
中我可以编写
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
错误
我知道有一种解决方法可以使用PYTHONPATHenv变量来实现,方法是使用repo_root
的绝对路径对其进行扩充,并将其提供给工具脚本的调用,即:
machine_name: ~/random/place$ PYTHONPATH=$PYTHONPATH:/path/to/repo python /path/to/repo/tool1/tool1.py
但我更喜欢不那么笨重的
你知道我该怎么做吗
使用
sys.path.append('/custom/path/to/modules')
将lib
的路径添加到作用域中。然后它应该可以作为一个模块调用您确实需要在任何要导入的目录中添加
__init__.py
文件,就像它是一个模块一样,否则Python不会将它们视为模块,您将得到另一个ImportError
相关问题 更多 >
编程相关推荐