无法从子目录导入模块

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.