Python模組和套件重名的解決方法
這篇文章主要為大家介紹了在Python中模組與包有相同名字的處理方法,文中介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
前言
在程式設計開發中,個人覺得,只要按照規範去做,很少會出問題。剛開始學習一門技術時,的確會遇到很多的坑。踩的坑多了,這是好事,會學到更多東西,也會越來越覺得依照規範做的重要性,規範的製定就是用來規避問題的。有時候確實應該聽聽有經驗人的建議,不要一意孤行。這好像不是本文的重點,其實我重點是想表達,盡量照規範做事,這樣會少走很多彎路。
我現在使用的主力程式語言是 Python,在接觸 Python 至今,我感覺我踩踏的坑還是極少的,基本上沒有遇到什麼奇怪的問題。實際上,這並不是一件好事,不踩坑,很多躺在暗處的知識點你不會了解,所以也很難成長。幸好,有一些會踩坑的同事。
一同事問我,在 Python 中,如果一個模組和一個套件同名時,是不是只能導入包,如果要導入模組該怎麼辦。他的意思大概是這樣的,在專案的同一級目錄下,有一個 foo.py 檔案和一個 foo/ 目錄,如果 import foo 會導入 foo/ 的內容而不是 foo.py 的內容。
被問到這個問題時,我首先感覺到的是詬異,這明顯是存在歧義的。如果是我,肯定不會把模組名和包名設計成一樣的名字,因為本質上來說在導入的時候沒辦法區分到底要導入誰。除非系統有特別的規定,例如,規定這種情況只能匯入包。
我的潛意識裡認為這裡應該報錯,Python 解釋器不知道要導入誰。但是,同事告訴我,別人的程式碼是這麼寫的,而且在這種情況下會預設導入包。那就是可以的咯,而且解釋器已經規定這種情況會總是導入包。
為了驗證下這一點,我寫了個簡單的項目,項目結構如下:
##
. ├── main.py └── same ├── api │ └── init.py ├── auth │ └── init.py ├── auth.py └── init.py
from .. import auth
auth_str = "This is str in package!"
auth_str = "This is str in module!"
from future import print_function from same.api import auth # Script starts from here if name == "main": print(auth.auth_str)
same.auth 套件中定義了一個
auth_str
字串,又在同名的same.auth 模組中定義了一個同名的
auth_str 字串,然後在same.api 套件嘗試導入auth,最後在main.py 嘗試輸出
same.api.auth.auth_str,看看到底哪個字串會被列印。同時嘗試用Python2 和Python3 執行main.py,得到的結果都是:
#
This is str in package!
##其中有一個人回答說Python 官方文檔中在描述模組搜尋路徑時提到了這一點:docs.python.org/3/tutorial/modules.html#the-module-search-path.
文件中有以下說明:
After initialization, Python programs can modify sys.path. The directory containing the script being run is placed at the beginning of the search path, ahead of the standard library path. This means that scripts in that directory will be loaded instead. This means that scripts in that directory will be loaded instead of modulname in the samebra directory. This is an error unless the replacement is intended. See section Standard Modules for more information.
也就是說,目錄在庫的搜尋路徑下會首先被搜索,這就意味著目錄會代替同名的模組被載入。
I am finally relieved now, and my previous conclusion has been confirmed. In Python, if you try to import a module and package with the same name, the package will be imported. In this case, if you want to import the module, you may need to use some 'hack' methods. There are some examples in the stackoverflow post mentioned above. Of course, the best way is to avoid such a design, so that you won't spend so long looking up information, and you won't spend so long writing articles similar to this article.
Summary
[Related recommendations]
1. Special recommendation:"php Programmer Toolbox" V0.1 version download
3. Python object-oriented video tutorial
以上是Python模組和套件重名的解決方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

VS Code可以在Windows 8上運行,但體驗可能不佳。首先確保系統已更新到最新補丁,然後下載與系統架構匹配的VS Code安裝包,按照提示安裝。安裝後,注意某些擴展程序可能與Windows 8不兼容,需要尋找替代擴展或在虛擬機中使用更新的Windows系統。安裝必要的擴展,檢查是否正常工作。儘管VS Code在Windows 8上可行,但建議升級到更新的Windows系統以獲得更好的開發體驗和安全保障。

VS Code 可用於編寫 Python,並提供許多功能,使其成為開發 Python 應用程序的理想工具。它允許用戶:安裝 Python 擴展,以獲得代碼補全、語法高亮和調試等功能。使用調試器逐步跟踪代碼,查找和修復錯誤。集成 Git,進行版本控制。使用代碼格式化工具,保持代碼一致性。使用 Linting 工具,提前發現潛在問題。

在 Notepad 中運行 Python 代碼需要安裝 Python 可執行文件和 NppExec 插件。安裝 Python 並為其添加 PATH 後,在 NppExec 插件中配置命令為“python”、參數為“{CURRENT_DIRECTORY}{FILE_NAME}”,即可在 Notepad 中通過快捷鍵“F6”運行 Python 代碼。

在 Sublime Text 中運行 Python 代碼,需先安裝 Python 插件,再創建 .py 文件並編寫代碼,最後按 Ctrl B 運行代碼,輸出會在控制台中顯示。
