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