本文目錄一覽:
- 1、python命名空間包導入算法?
- 2、Python 導入自建包報錯ModuleNotFoundError: No module named xxx
- 3、python怎樣導入自己寫的包
- 4、python 導入數據包的幾種方法
- 5、python外部包使用說明方式導入?
- 6、python中導包錯誤,具體錯誤如下?
python命名空間包導入算法?
要理解命名空間包,需從底層去學習包導入操作在Python 3.3中是如何完成的。在導入過程中,3.3版本與3.2和之前的版本一樣,依舊會遍歷模塊搜索路徑sys.path中的每個目錄。然而,在3.3版本中,當對每個模塊搜索路徑中的directory搜索名為spam的被導人包時,Python會按照下面的順序測試一系列更廣的匹配條件:
1.如果找到directory\spaml_init__.py,便會導入一個常規包並返回。
2.如果找到directoryspam.ipy,pyc,或其他模塊擴展名},便會導人一個簡單模塊並
返回。
3.如果找到文件夾directorylspam,便會將其記錄下來,而掃描將從搜索路徑中的下一
個目錄繼續。
4.如果上述的所有都沒有找到,掃描將從搜索路徑中的下一個目錄繼續。
如果搜索路徑掃描結束後沒有從上述步驟1和步驟2中返回一個模塊或包,而同時在上述步驟3中至少記錄了一個路徑,那麼就會創建一個命名空間包。
命名空間包的創建會立即發生,而且不會推遲到一個子層級的導入發生之時。新的命名空間包有一個_path_屬性,該屬性被設置為在上述步驟3中掃描並記錄的目錄路徑字符串的可迭代對象,但是沒有_file_屬性。
path_屬性在隨後更深的訪問過程中用於搜索所有包組件。命名空間包的_path_中每個被記錄的項目,都會在進一步嵌套的項目被請求時進行搜索,這很像一個常規包的單獨路徑。
從另一方面看,命名空間包的_path_屬性對於更低層次組件的關係,和sys.path對於頂層最左側的包導入路徑的關係是一樣的。命名空間包成為了訪問更低層次項目的「父路徑」,這一訪問也使用了上面介紹的四個步驟。
最終的結果是一個命名空間包是一種對多個目錄的虛擬拼接,這些目錄可以位於多個sys.path項目中。然而一旦一個命名空間包被創建,它和一個常規包之間並沒有功能上的區別,它能夠支持我們所學過的常規包的一切功能,包括包相對導入語法。
Python 導入自建包報錯ModuleNotFoundError: No module named xxx
如圖,三個模塊的關係:模塊A導入模塊B,而模塊B導入模塊C
執行模塊A時,會報錯ModuleNotFoundError: No module named xxx,說找不到模塊C。
於是就打開模塊B查看,發現導入模塊C是正常的,這就讓人很頭疼
模塊B和模塊C是同一個包,而模塊A又是在另一個包。同個包內的模塊B可以用相對路徑找到模塊C,不同包的模塊A則不能。
方案一:項目根目錄為起始路徑導入包
在IDE中執行python程序,編譯器會自動把當前項目的根目錄加入到包查找路徑中,可以理解為加到PYTHONPATH下,所以導入寫法如下:
方案二:導包時,把目標模塊的路徑加入包查找路徑中
推薦使用方案一,養成好習慣,從項目根目錄開始導包。
python怎樣導入自己寫的包
python導入自己寫的包的方法:
1、導入同級目錄下的文件可以用「import 包名」導入
2、導入子目錄文件可以用「from 包名 import 文件名」導入
更多Python知識,請關註:Python自學網!!
python 導入數據包的幾種方法
1.直接導入整個數據包:improt 數據包
2.導入數據包中的某一個函數: from 數據包 improt 函數(當函數這一項為 * 時為導入整個數據包)
3. 導入之定義的數據包()
python外部包使用說明方式導入?
除了讓包內導入更加顯式,這個功能的一部分設計初衷是,為了幫助腳本解決同名文件出現在模塊搜索路徑上多個不同位置時的二義性。考慮包目錄,這定義了一個名為mypkg 的包,其中含有名為mypkg.main和mypkg.string 的模塊。現在,假設模塊main試圖導入名為string的模塊。在 Python 2.X和更早版本中,Python會先尋找mypkg目錄以執行相對導入。這會找到並導入位於該處的string.py文件,將其賦值給mypkg.main模塊命名空間內的名稱string。不過,這一導入的本意可能是要導入Python標準庫的string模塊。可惜的是,在這些Python版本中,無法直接忽略mypkg.string 去尋找位於模塊搜索路徑更右側的標準庫中的string模塊。此外,我們無法使用完整包導入路徑來解決這個問題,因為我們無法依賴在每台機器上的標準鏈接庫路徑。換句話說,包中的簡單導入可能具有二義性而且容易出錯。在包內,我們無法確定imports pam語句指的是包內的模塊還是包外的模塊。一種可能的後果是,一個局部的模塊或包會在不經意間隱藏了sys.path 上的另一個模塊。在實踐中,Python使用者可以避免為他們自己的模塊重複使用標準庫模塊的名稱(如果需要標準string庫,就不要把新的模塊命名為string)。但是,一個包還是有可能意外地隱藏標準庫模塊。再者,Python 以後可能新增標準庫模塊,而其名稱可能剛好就和自己的一個模塊同名。而依賴於沒有點號開頭相對導入的程序代碼同樣也不容易理解,因為讀者可能對希望使用哪個模塊而感到困惑。所以我們最好能在代碼中顯式地指出導入的解析過程。
python中導包錯誤,具體錯誤如下?
在程序主模塊(使用python命令執行的那個py文件)中不能使用相對導入,必須使用絕對導入。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/270186.html