pkg/
__init__.py
foo.py
bar.py
baz.py
我有一堆foo.py,bar.py和baz.py中的模塊導入相同。跨python包導入
有沒有一種方法可以在__init__.py
中進行導入?我需要在foo.py中寫什麼?
pkg/
__init__.py
foo.py
bar.py
baz.py
我有一堆foo.py,bar.py和baz.py中的模塊導入相同。跨python包導入
有沒有一種方法可以在__init__.py
中進行導入?我需要在foo.py中寫什麼?
將進口配置在__init__.py
將是一個壞主意; __init__.py
被用作模塊對象的內容,所以它是一個公共接口。此外,__init_.py
最初是在您的軟件包導入時導入的,而您實際上並不需要導入纔會發生,直到您的子模塊需要它們。
最好的方法是將通用代碼放入一個內部細節模塊中,標記爲單個初始下劃線(意爲「私有」),例如, _imports.py
,然後在你的其他文件中寫入from ._imports import *
。
你猜對了這樣做的正確方法,但是我可以讓它更正式一點,並給出(希望)比你在別處找到的更清楚的解釋。如果你想模塊化導入,根據你的編碼哲學本身可能是好的或壞主意(透明性和代碼重用),無論導入是否發生在__init__.py
中,都可以從其他腳本導入導入。例如:
"""import_scripts.py"""
import numpy as np
import scipy as sp
...
"""actual_code.py"""
from import_scripts import *
# np and sp are now in scope
從__init__.py
導入大多是一樣的,你只是傳統上使用,而不是如果你從同一模塊來訪問它的相對進口:
# To import form __init__
from . import *
重要的是,雖然注意,如果您將這些python腳本明確地作爲模塊運行而不是作爲腳本運行,這些類型的導入將僅適用。這意味着:
python -m foo
,而不是
python foo.py
重要,但微妙的區別。
希望有所幫助。如果您還有其他問題,請告訴我。
+1感謝您的微妙區別! – ksindi