从总体上讲,我的项目结构如下。
dir/
moduleA/
__init__.py
file1.py
file2.py
main.py
file2.py包含一些我要在file1.py中导入的全局变量
# --- file2.py schema ---
SOME_GLOBAL_VARIABLE = 1
。
# --- file1.py schema ---
from moduleA.file2 import SOME_GLOBAL_VARIABLE
class MyClass():
def __init__(self):
self.some_attr = SOME_GLOBAL_VARIABLE
def run():
print(self.some_attr)
当我在下面运行创建MyClass实例的main.py时,代码运行没有错误。
# --- main.py ---
from moduleA.file1 import MyClass
x = MyClass()
x.run()
但是,当我打开一个Python控制台并执行以下操作以从file1.py导入MyClass时,出现导入错误,即没有名为moduleA的模块。
from moduleA.file1 import MyClass
# (... some traceback statements)
from moduleA.file2 import SOME_GLOBAL_VARIABLE
ModuleNotFoundError: No module named 'moduleA'
当Python清楚地找到moduleA / file1.py时,这怎么可能,否则它将无法尝试执行该行
from moduleA.file2 import SOME_GLOBAL_VARIABLE
对我来说奇怪的是,当我运行main.py脚本时,它运行时没有错误。
我想这是由于我缺乏对Python如何准确导入模块的了解,因此非常感谢您的帮助。我尝试在moduleA中添加 init .py文件,但这不能解决问题。
如果此信息相关,则路径some_path / dir在我的PYTHONPATH上。
答案 0 :(得分:0)
这是由于__package__
变量引起的。
要查看其值,请在导入前在print(__package__)
中添加file1.py
。
直接运行file1.py
时,您可以看到__package__
是None
。
但是另一方面,在运行main.py
时,在导入file1.py
(并因此运行)时,__package__
的值(在file1.py
中)突然变为{{1} },这就是python能够导入moduleA
的原因。