【发布时间】:2016-11-20 08:24:00
【问题描述】:
我在这里有一个 python 模块/root/python/foo.py。我在文件夹/root/lib/ 中有一堆其他模块,看起来像这样
lib/
|
├─ module1/
| ├─ __init__.py
| └─ bar.py
|
└─ module2/
├─ __init__.py
└─ bar.py
我想从foo.py 导入/root/lib/module1 和/root/lib/module2。我想不必须将/root/lib/ 添加到python 系统路径。 This stack overflow answer 告诉您如何使用imp.load_source、importlib.machinery.SourceFileLoader 或importlib.util 类从文件加载模块(取决于python 版本)。我认为这些仅在模块是单个文件时才有效。如果我在 Python 3.4 中尝试这样的事情
from importlib.machinery import SourceFileLoader
problem_module = SourceFileLoader('test_mod', '/root/lib/module1').load_module()
我收到了IsADirectoryError
我的问题是,如果模块是一个目录,是否有类似的方法来加载模块(给定它的完整路径),而不将整个 lib/ 文件夹添加到系统路径?
【问题讨论】:
-
在module1之后添加
' -
您需要使用
sys.path来可靠地导入模块。见this question。 -
"我希望不必将 /root/lib/ 添加到 python 系统路径。" - 为什么不?这是到目前为止实现这一目标的最简单方法。
-
我不想将目录添加到系统路径,因为我认为库中可能有数百个模块,并且我认为只针对我想要的文件夹会更好。可能将
lib文件夹添加到系统路径并没有我想象的那么糟糕。
标签: python