![](/img/trans.png)
[英]Can't import python module from a subdirectory with a simple import statement
[英]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的實例)時,代碼運行沒有錯誤。
# --- 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上。
這是由於__package__
變量引起的。
要查看其值,請在file1.py
之前在file1.py
添加print(__package__)
。
直接運行file1.py
,您會看到__package__
是None
。
但是另一方面,在運行main.py
,在導入file1.py
(並因此運行它)時, __package__
的值(在file1.py
)突然是moduleA
,這就是python能夠導入moduleA.file2
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.