无法从子目录导入模块
Can't import module from subdirectory
在较高层次上,我的项目结构如下所示。
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)
当我在运行 main.py下面创建一个MyClass的实例时,代码运行s没有错误。
# --- 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 是如何导入模块的,所以非常感谢您的帮助。我尝试在模块 A 中添加 init.py 文件,但这并没有解决问题。
如果此信息相关,路径 some_path/dir 在我的 PYTHONPATH 中。
这是由于 __package__
变量引起的。
要查看它的值,请在导入前在 file1.py
中添加 print(__package__)
。
直接运行file1.py
时,可以看到__package__
是None
。
但另一方面,当 运行 main.py
时,当导入 file1.py
时(因此 运行 它),__package__
的值(在 file1.py
) 突然变成 moduleA
,这就是为什么 python 能够导入 moduleA.file2
.
在较高层次上,我的项目结构如下所示。
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)
当我在运行 main.py下面创建一个MyClass的实例时,代码运行s没有错误。
# --- 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 是如何导入模块的,所以非常感谢您的帮助。我尝试在模块 A 中添加 init.py 文件,但这并没有解决问题。
如果此信息相关,路径 some_path/dir 在我的 PYTHONPATH 中。
这是由于 __package__
变量引起的。
要查看它的值,请在导入前在 file1.py
中添加 print(__package__)
。
直接运行file1.py
时,可以看到__package__
是None
。
但另一方面,当 运行 main.py
时,当导入 file1.py
时(因此 运行 它),__package__
的值(在 file1.py
) 突然变成 moduleA
,这就是为什么 python 能够导入 moduleA.file2
.