簡體   English   中英

無法從子目錄導入模塊

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM