回答
導入在Python的模塊或程序包是一個概念上簡單的操作:
查找對應於所述進口的.py文件。這涉及Python路徑和一些其他機器,但會導致找到特定的.py文件。
對於導入中的每個目錄級別(
import foo.bar.baz
有兩個級別),找到相應的__init__.py
文件並執行它。執行它只是意味着在文件中運行所有的頂級語句。最後,.py文件本身(本例中爲
foo/bar/baz.py
)被執行,這意味着所有的頂級語句都被執行。所有作爲該執行結果而創建的全局變量都被捆綁到一個模塊對象中,並且該模塊對象是導入的結果。
如果這些步驟都沒有導入子包,那麼這些子包不可用。如果他們確實導入了子包,那麼他們就可以使用。包裝作者可以按照自己的意願去做。
我認爲值得澄清的是,在導入包時,在步驟1中找到的.py文件是該包的\ _ \ _ init \ _ \ _。py。除非在\ _ \ _init \ _ \ _。py文件中導入子包,否則它們將不可用。 – 2017-07-03 06:13:37
這是爲了允許只有最少量的代碼必須加載多部分庫,您可能不會使用整個。例如,你可能沒有使用lxml
的html
部分,因此不想處理加載它的代碼。
lxml
是一個包,而不是一個模塊。包是一組模塊。碰巧,您也可以直接導入包,但不會自動導入其所有子模塊。
至於爲什麼這是好的,這是BDFL的問題。我認爲這可能是因爲軟件包通常很大,導入所有子模塊會導致性能下降。
lxml
在Python中被稱爲package,它是模塊的分級集合。軟件包可以是巨大的,因此它們可以選擇性地關於它們在導入時被拉入的內容。否則,每個人都必須導入完整的層次結構,這會浪費資源。
這是設計。該軟件包可以選擇在其__init__.py
中導入嵌套軟件包,然後,您將可以毫無問題地訪問嵌套軟件包。這對於軟件包編寫者來說是一個選擇問題,目的是儘量減少可能不會使用的代碼量。
- 1. Python子模塊:「導入爲」與「導入」
- 2. Python模塊導入*
- 3. Python模塊導入
- 4. 導入Python模塊
- 5. Python導入模塊
- 6. python導入模塊
- 7. 嵌入式Python模塊導入錯誤
- 8. Python嵌入成C - 導入模塊
- 9. 導入導入主模塊的模塊
- 10. 有什麼區別:導入模塊和從模塊導入模塊?
- 11. 導入嵌套的Typescript模塊
- 12. 如何從嵌套模塊導入?
- 13. 的Python:模塊的導入模塊
- 14. 爲什麼我無法導入模塊?
- 15. 爲什麼這個裝飾器無法從「從模塊導入*」模塊導入?
- 16. 使用導入模塊引用嵌套模塊
- 17. Python導入模塊vs導入_module
- 18. Python:已導入的導入模塊
- 19. 導入模塊
- 20. 導入模塊
- 21. 導入模塊
- 22. 。導入[模塊] - >導入錯誤:無法導入名[模塊]
- 23. 導入Python模塊錯誤
- 24. Python模塊導入問題
- 25. 導入Python模塊失敗
- 26. 導入python作業模塊
- 27. Python模塊/導入數據?
- 28. python模塊導入錯誤
- 29. 動態導入Python模塊
- 30. Python模塊導入Visual Studio
您可能注意到'import os'允許您在代碼中使用'os.path.whatever'。所以,這取決於模塊的作者。 – 2012-02-15 23:34:04