python xxx.py 和 python -m xxx兩種執(zhí)行方式的使用場(chǎng)景和問題解決
一、直接運(yùn)行腳本方式(python script.py)
工作原理
- Python解釋器將腳本所在的 目錄 添加到 sys.path 的 第一位
- 腳本被作為 main 模塊執(zhí)行
- 導(dǎo)入搜索從腳本所在目錄開始,然后是Python標(biāo)準(zhǔn)庫路徑和已安裝包路徑
導(dǎo)入機(jī)制
- 當(dāng)腳本中有 import xxx 語句時(shí),Python會(huì)首先在腳本所在目錄查找 xxx.py
- 如果找不到,才會(huì)去系統(tǒng)路徑中查找
- 相對(duì)導(dǎo)入(如 from . import xxx )在直接運(yùn)行的腳本中 不起作用 ,因?yàn)槟_本被視為頂級(jí)模塊
示例
- sys.path[0] 被設(shè)置為 online/ods/zs/
- import utils.aiform_util 會(huì)在 online/ods/zs/utils/ 下查找,而不是項(xiàng)目根目錄的 utils/
二、模塊方式運(yùn)行(python -m module)
工作原理
- Python解釋器將 當(dāng)前工作目錄 添加到 sys.path 的第一位
- 按照模塊導(dǎo)入規(guī)則查找并加載指定模塊
- 將該模塊作為 main 執(zhí)行
導(dǎo)入機(jī)制
- 導(dǎo)入搜索從當(dāng)前工作目錄開始
- 模塊路徑使用點(diǎn)號(hào)(.)分隔,而不是斜杠(/)
- 相對(duì)導(dǎo)入在這種模式下可以正常工作
- 包內(nèi)的 init.py 文件會(huì)被正確加載
示例
- sys.path[0] 被設(shè)置為當(dāng)前工作目錄(通常是項(xiàng)目根目錄)
- import utils.aiform_util 會(huì)在項(xiàng)目根目錄的 utils/ 下查找,這符合項(xiàng)目結(jié)構(gòu)
三、兩種方式的適用場(chǎng)景
直接運(yùn)行方式適用于:
- 獨(dú)立腳本,不依賴項(xiàng)目結(jié)構(gòu)
- 簡單的單文件程序
- 臨時(shí)測(cè)試或調(diào)試單個(gè)文件
- 腳本中使用絕對(duì)導(dǎo)入或已添加系統(tǒng)路徑的情況
模塊方式適用于:
- 大型項(xiàng)目中的模塊化代碼
- 有復(fù)雜導(dǎo)入關(guān)系的項(xiàng)目
- 使用相對(duì)導(dǎo)入的代碼
- 需要保持包結(jié)構(gòu)完整性的情況
- 生產(chǎn)環(huán)境部署
四、解決導(dǎo)入問題的方法
對(duì)于直接運(yùn)行方式:
- 添加項(xiàng)目根目錄到系統(tǒng)路徑 :
- 使用絕對(duì)導(dǎo)入 :明確指定完整導(dǎo)入路徑
- 創(chuàng)建環(huán)境變量 :設(shè)置 PYTHONPATH 包含項(xiàng)目根目錄
對(duì)于模塊方式:
- 正確使用點(diǎn)號(hào) : python -m online.ods.zs.module_name (不帶 .py )
- 確保工作目錄正確 :先 cd 到項(xiàng)目根目錄
- 確保包結(jié)構(gòu)完整 :每個(gè)目錄都有 init.py 文件
五、總結(jié)與最佳實(shí)踐
直接運(yùn)行方式
- 優(yōu)點(diǎn) :簡單直觀,命令簡短
- 缺點(diǎn) :容易出現(xiàn)導(dǎo)入問題,不尊重包結(jié)構(gòu)
- 適用 :簡單腳本、快速測(cè)試
模塊方式
- 優(yōu)點(diǎn) :尊重Python的模塊系統(tǒng),導(dǎo)入更可靠,適合復(fù)雜項(xiàng)目
- 缺點(diǎn) :命令較長,需要理解模塊路徑
- 適用 :生產(chǎn)環(huán)境、復(fù)雜項(xiàng)目、團(tuán)隊(duì)協(xié)作
最佳實(shí)踐
- 生產(chǎn)環(huán)境優(yōu)先使用模塊方式 : python -m online.ods.zs.module_name
- 保持一致的項(xiàng)目結(jié)構(gòu) :確保每個(gè)包都有 init.py
- 在項(xiàng)目根目錄運(yùn)行命令 :避免路徑混淆
- 使用虛擬環(huán)境 :隔離項(xiàng)目依賴
- 編寫可導(dǎo)入的代碼 :即使是腳本也應(yīng)考慮被導(dǎo)入的情況
到此這篇關(guān)于python xxx.py 和 python -m xxx兩種執(zhí)行方式的使用場(chǎng)景和問題解決的文章就介紹到這了,更多相關(guān)python xxx.py 和 python -m xxx 執(zhí)行內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在win10和linux上分別安裝Python虛擬環(huán)境的方法步驟
這篇文章主要介紹了在win10和linux上分別安裝Python虛擬環(huán)境的方法步驟,虛機(jī)環(huán)境有非常多的優(yōu)點(diǎn),今天我們用的虛擬環(huán)境是virtualenv。感興趣的小伙伴們可以參考一下2019-05-05
解決pycharm運(yùn)行程序出現(xiàn)卡住scanning files to index索引的問題
今天小編就為大家分享一篇解決pycharm運(yùn)行程序出現(xiàn)卡住scanning files to index索引的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-06-06
詳解python數(shù)組中的符號(hào)...與:符號(hào)的不同之處
這篇文章主要介紹了詳解python數(shù)組中的符號(hào)...與:符號(hào)的不同之處,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
Django Rest framework之認(rèn)證的實(shí)現(xiàn)代碼
這篇文章主要介紹了Django Rest framework之認(rèn)證的實(shí)現(xiàn)代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-12-12
使用Python實(shí)現(xiàn)簡單的數(shù)據(jù)備份
數(shù)據(jù)備份,即數(shù)據(jù)的復(fù)制和存儲(chǔ),是指將數(shù)據(jù)從一個(gè)位置復(fù)制到另一個(gè)位置,以防止原始數(shù)據(jù)丟失或損壞,下面我們就來了解一下用Python如何實(shí)現(xiàn)這一功能吧2025-03-03
python中的PywebIO模塊制作一個(gè)數(shù)據(jù)大屏
這篇文章主要介紹了python中的PywebIO模塊制作一個(gè)數(shù)據(jù)大屏,一個(gè)制作數(shù)據(jù)大屏的工具,非常的好用,100行的Python代碼就可以制作出來一個(gè)完整的數(shù)據(jù)大屏,并且代碼的邏輯非常容易理解,需要的朋友可以參考一下2022-03-03

