【发布时间】:2022-06-14 23:08:47
【问题描述】:
我有一个相当简单的设置:
[FOLDER]
|-> [Lib]
__init__.py (__all__=["modA","modB"])
modA.py (contains class named classA)
modB.py (contains class named classB + from modA import classA)
test1.py (from Lib.modA import classA
from Lib.modB import classB)
|-> [example]
test2.py (import sys
sys.path.append("../")
from Lib.modA import classA
from Lib.modB import classB)
从 Lib 文件夹运行 test1.py 可以完美运行而不会出现错误。另一方面,从示例文件夹运行 test2.py 需要 sys-patch 才能找到 Lib;但是,它随后崩溃,No module named modA 通过test2.py 中的from Lib.modB import classB 追溯到modB.py 中的from modA import classA。
应该如何在一个模块中定义一个导入,这样它也可以工作,而不管将来可能使用/导入该模块的任何脚本的可能位置如何?
【问题讨论】:
-
让 lib 成为可以导入的实际包?
-
导入路径应由环境设置——通过安装、PYTHONPATH 或类似方式——而不是由程序本身——通过
sys.path或类似方式。后者仅用于元编程并在凌晨 2 点的紧迫期限内完成工作。 -
FWIW(在回答中将忽略这一点)我也不知道
test1.py会如何工作。它使用modA.pybothLib.modA和modA。这只会在手动修改导入路径时“起作用”,并导致程序状态不正确,因为事物实际上存在两次。 -
@Sayse & MisterMiyagi,确实如此,但我目前正在开发这个包,这使得安装和包的想法有点循环
-
@MisterMiyagi test1.py 在我阅读时只使用了一次 modA。它从 lib.modA(.py) 导入 modA
标签: python import python-module