无法从子目录

时间:2018-10-14 14:40:31

标签: python import module 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)     

当我在下面运行创建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上。

1 个答案:

答案 0 :(得分:0)

这是由于__package__变量引起的。
要查看其值,请在导入前在print(__package__)中添加file1.py

直接运行file1.py时,您可以看到__package__None
但是另一方面,在运行main.py时,在导入file1.py(并因此运行)时,__package__的值(在file1.py中)突然变为{{1} },这就是python能够导入moduleA的原因。