Python -m參數(shù)原理及使用方法解析
python -m xxx.py
作用是:把xxx.py文件當(dāng)做模塊啟動(dòng)
但是我一直不明白當(dāng)做模塊啟動(dòng)到底有什么用。python xxx.py和python -m xxx.py有什么區(qū)別!
自問自答:
python xxx.py
python -m xxx.py
這是兩種加載py文件的方式:
1叫做直接運(yùn)行
2把模塊當(dāng)作腳本來啟動(dòng)(注意:但是__name__的值為'main' )
不同的加載py文件的方式,主要是影響——sys.path 這個(gè)屬性。sys.path 就相當(dāng)于liunx中的PATH。
下面來看一下sys.path
>>> import sys >>> sys.path ['', '/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python27.zip', ...]
上面的內(nèi)容我只截取了一段。此為當(dāng)前python解釋器運(yùn)行的環(huán)境,python解釋器會(huì)在這些目錄下去尋找依賴的庫!
注解一點(diǎn):‘'——為當(dāng)前目錄
下面有兩個(gè)例子,通過不同方式啟動(dòng)同一文件,sys.path屬性的值有何不同。
# run.py 內(nèi)容如下 import sys print(sys.path) # 直接啟動(dòng):python run.py test_import_project git:(master) ✗ python run.py ['/Users/sx/Documents/note/test_py/test_import_project', '/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python27.zip', ...] # 以模塊方式啟動(dòng):python -m run.py test_import_project git:(master) ✗ python -m run.py ['', '/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python27.zip',
*** 細(xì)心的同學(xué)會(huì)發(fā)現(xiàn),區(qū)別就是在第一行。
直接啟動(dòng)是把run.py文件,所在的目錄放到了sys.path屬性中。
模塊啟動(dòng)是把你輸入命令的目錄(也就是當(dāng)前路徑),放到了sys.path屬性中***
在工作場(chǎng)景中有什么用呢?
# 目錄結(jié)構(gòu)如下 package/ __init__.py mod1.py package2/ __init__.py run.py
# run.py 內(nèi)容如下 import sys from package import mod1 print(sys.path)
如何才能啟動(dòng)run.py文件?
# 直接啟動(dòng)(失?。? ➜ test_import_project git:(master) ✗ python package2/run.py Traceback (most recent call last): File "package2/run.py", line 2, in <module> from package import mod1 ImportError: No module named package # 以模塊方式啟動(dòng)(成功) ➜ test_import_project git:(master) ✗ python -m package2.run ['', '/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python27.zip', ...]
當(dāng)需要啟動(dòng)的py文件引用了一個(gè)模塊。你需要注意:在啟動(dòng)的時(shí)候需要考慮sys.path中有沒有你import的模塊的路徑!
這個(gè)時(shí)候,到底是使用直接啟動(dòng),還是以模塊的啟動(dòng)?目的就是把import的那個(gè)模塊的路徑放到sys.path中。你是不是明白了呢?
官方文檔參考: http://www.pythondoc.com/pythontutorial3/modules.html
導(dǎo)入一個(gè)叫 mod1 的模塊時(shí),解釋器先在當(dāng)前目錄中搜索名為 mod1.py 的文件。如果沒有找到的話,接著會(huì)到 sys.path 變量中給出的目錄列表中查找。 sys.path 變量的初始值來自如下:
- 輸入腳本的目錄(當(dāng)前目錄)。
- 環(huán)境變量 PYTHONPATH 表示的目錄列表中搜索(這和 shell 變量 PATH 具有一樣的語法,即一系列目錄名的列表)。
- Python 默認(rèn)安裝路徑中搜索。
- 實(shí)際上,解釋器由 sys.path 變量指定的路徑目錄搜索模塊,該變量初始化時(shí)默認(rèn)包含了輸入腳本(或者當(dāng)前目錄), PYTHONPATH 和安裝目錄。這樣就允許 Python程序了解如何修改或替換模塊搜索目錄。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
基于Python詞云分析政府工作報(bào)告關(guān)鍵詞
這篇文章主要介紹了基于Python詞云分析政府工作報(bào)告關(guān)鍵詞,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06Python unittest單元測(cè)試框架實(shí)現(xiàn)參數(shù)化
這篇文章主要介紹了Python unittest單元測(cè)試框架實(shí)現(xiàn)參數(shù)化,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04Python+Appium自動(dòng)化操作微信的教程分享
Appium?是一個(gè)開源的自動(dòng)化測(cè)試工具,支持?Android、iOS?平臺(tái)上的原生應(yīng)用,支持?Java、Python、PHP?等多種語言。本文主要介紹了Python+Appium自動(dòng)化操作微信的教程,希望對(duì)大家有所幫助2023-01-01Python使用PySimpleGUI和Pygame編寫一個(gè)MP3播放器
這篇文章主要為大家詳細(xì)介紹了Python如何使用PySimpleGUI和Pygame編寫一個(gè)簡(jiǎn)單的MP3播放器,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以學(xué)習(xí)一下2023-11-11OpenCV結(jié)合selenium實(shí)現(xiàn)滑塊驗(yàn)證碼
本文主要介紹了OpenCV結(jié)合selenium實(shí)現(xiàn)滑塊驗(yàn)證碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08