簡體   English   中英

python相對導入模塊失敗

[英]python relative import module failed

我的文件結構如下:

root/
    v1/
    __init__.py
    example_1.py
    script/
        __init__.py
        classification.py
        prediction.py
        example2.py

分類看起來像這樣:

#classification.py    
print(__name__)
from .prediction import predict_func
def func1():
    predict_func()

像這樣的example1.py可以正常工作

#example1.py
from script.classification import func1
func1()

但是從example2.py導入分類,如下所示將失敗

#example2.py
from classification import func1
func1()    

因為在example2.py場景中,分類中的__name__只是classification而不是script.classification為example1.py,因此此處沒有父節點,因此導入模塊失敗。

我知道解決方案之一是在example1.py和exaple2.py中都將腳本目錄添加到sys.path中,並在分類from prediction import predict_func使用。 這可以同時在example1.py和example2.py中使用,但這是一個好方法,還有其他替代方法嗎?

由於example_1.py位於root目錄中,因此我認為root是項目的源根。 因此,此目錄必須出現在Python路徑中,即: sys.path

並且,位於root目錄下的每個目錄都應該是一個Python包。 因此, script必須具有__init__.py文件(通常為空)。

您應該看一下有關Modules的官方Python教程。

編輯

在下面的第二個示例中,您嘗試導入分類,就好像它是根軟件包一樣,但不是。

# example2.py
from classification import func1
func1()

要解決此問題,您需要使用相對導入或完整的軟件包名稱:

# example2.py
from script.classification import func1
func1()

當然,要運行您的示例,您需要執行以下操作:

python -m script.example2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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