python的導包問題,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-hant/n/270186.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-16 13:36
下一篇 2024-12-16 13:36

相關推薦

  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • Python官網中文版:解決你的編程問題

    Python是一種高級編程語言,它可以用於Web開發、科學計算、人工智能等領域。Python官網中文版提供了全面的資源和教程,可以幫助你入門學習和進一步提高編程技能。 一、Pyth…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29

發表回復

登錄後才能評論