国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

充分理解 python -m mod

Allen / 801人閱讀

摘要:最近在看的官方文檔,提到一個的用法,很是不理解,所以查找了很多文檔,并進(jìn)行了如下總結(jié)。的用途定位并執(zhí)行該模塊。可讀取包內(nèi)任何文件內(nèi)容。如果沒有,則從查找,找到后載入內(nèi)存,并加入到字典,名稱也將導(dǎo)入到當(dāng)前模塊的命名空間。

最近在看 __main__ 的官方文檔 —— https://docs.python.org/3/library/__main__.html#module-__main__,提到一個 python -m 的用法,很是不理解,所以查找了很多文檔,并進(jìn)行了如下總結(jié)。
查看 Python 的 help 內(nèi)容
$ python --help
...
-m mod : run library module as a script (terminates option list)
# 直譯就是按照腳本的方式執(zhí)行模塊
...
有無 -m 參數(shù)的比較
1. python script.py # 直接執(zhí)行腳本
2. python -m script.py # 當(dāng)做模塊的方式執(zhí)行,相當(dāng)于 import

一般情況下,我們會想當(dāng)然的認(rèn)為,有無參數(shù) -m 對程序會有不同的影響,但是很可惜,第二種寫法是會在程序執(zhí)行之后報錯的。其正確的寫法是:丟掉 .py 后綴

首先直觀的觀察執(zhí)行結(jié)果,Python 的版本是 3.6.3
編寫 script.py 腳本,內(nèi)容如下:

import sys
print(sys.path)
print(sys.modules)

直接執(zhí)行腳本

$ python script.py
["/home/ossifrage/workspaces/python-m", "/usr/lib/python36.zip", "/usr/lib/python3.6", ...]
{..., "__main__": , ...}

當(dāng)做模塊方式執(zhí)行

$ python -m script
["", "/usr/lib/python36.zip", "/usr/lib/python3.6", ...]
{..., "__main__": , ..., "runpy": , "pkgutil": }

顯示的內(nèi)容還有很多,只突出顯示出了不同的地方。

通過比較不同的地方,我們發(fā)現(xiàn):

第一種方法——直接運行腳本,當(dāng)前腳本所在的路徑會加入到 sys.path 列表中,但是 sys.modules 字典中的 __main__ 的路徑不是絕對路徑,只是腳本名稱

第二種方法——當(dāng)做模塊方式運行,當(dāng)前腳本所在的路徑不會加入到 sys.path 列表中,但是 sys.modules 字典中的 __main__ 的路徑是絕對路徑,同時,還引入了 runpypkgutil 兩個模塊

runpy 的用途:定位并執(zhí)行該模塊。主要用途在于實現(xiàn)命令行 -m 執(zhí)行 python 模塊的效果。

pkgutil 的用途:獲取包里面的所有模塊列表。pkgutil.get_data() 可讀取包內(nèi)任何文件內(nèi)容。

模塊的導(dǎo)入機制

其實,上面的內(nèi)容涉及到了 Python 包模塊的導(dǎo)入機制。

要理解模塊的導(dǎo)入機制,得理解幾個關(guān)鍵的名詞。sys.path -> sys.modules -> < module >.__dict__。

sys.path:是一個列表。保存著模塊的搜索路徑。如果路徑?jīng)]有存在與該列表中,可使用 sys.path.append() 導(dǎo)入。

sys.modules: 是一個字典。所有加載到內(nèi)存中的模塊都存放在該字典中。當(dāng) import 一個模塊的時候,首先會在這個字典中查找是否已經(jīng)加載了目標(biāo)模塊。如果已加載,則將模塊的名字加入到正在調(diào)用 import 的模塊的 Local 命名空間(也就是< module >.__dict__)中。如果沒有,則從 sys.path 查找,找到后載入內(nèi)存,并加入到 sys.modules 字典,名稱也將導(dǎo)入到當(dāng)前模塊的 Local 命名空間。

reference

[[python]自問自答:python -m參數(shù)?](https://www.cnblogs.com/xuewe...

Python的-m參數(shù)

python中的import(涉及pkgutil和inspect包)

import 迷宮

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/41157.html

相關(guān)文章

  • 配置Apache,使Apache同時支持PHP和Python

    摘要:網(wǎng)上還查到一個方法是通過配置反向代理,我試了一個多小時然后放棄了。配置好反向代理之后,當(dāng)用戶訪問頁面時,服務(wù)器收到請求,將其轉(zhuǎn)換為交給處理,并將處理出的結(jié)果返回,這樣用戶就看到了正確的頁面。 最近開始學(xué)著用Python+Tornado+MongoDB寫網(wǎng)站,興起寫了一個博客,覺得很有意思所以想掛在服務(wù)器上發(fā)布出去找大家一起玩。這個時候就遇到了問題。 服務(wù)器是windows系統(tǒng),安裝的...

    nicercode 評論0 收藏0
  • CentOS 5系統(tǒng)安裝Django、Apache 、mod_wsgi部署Python環(huán)境教程

    摘要:系統(tǒng)安裝部署環(huán)境教程第一安裝依賴環(huán)境在準(zhǔn)備安裝框架部署之前,我們需要先安裝依賴環(huán)境,因為可能默認(rèn)的環(huán)境沒有完善的最新部署包。檢查最新版本的數(shù)據(jù)庫,然后部署安裝。到目前為止,我們已經(jīng)成功的在環(huán)境中部署了應(yīng)用程序,以及。 Django,是一款針對Python環(huán)境的WEB開發(fā)框架,能夠幫助我們構(gòu)架快捷、簡單的WEB框架設(shè)置,Django框架非常適合開發(fā)內(nèi)容應(yīng)用環(huán)境,所以在本文中,麥子將整理基...

    褰辯話 評論0 收藏0
  • Django + Apache 部署

    摘要:站真是個學(xué)習(xí)的地方,竟發(fā)現(xiàn)了楊老師的部署視頻,楊老師的站主頁在此主頁有一系列的學(xué)習(xí)視頻,推薦干貨用于部署的項目主要用了提供后臺,所以靜態(tài)文件僅有部分的。接下來是部署和激活階段了。 吐吐槽 此篇blog將詳細(xì)記錄部署Django的每一個步驟,網(wǎng)上現(xiàn)有的教程實在太少太老了!好多坑!第一次嘗試后臺很懵,最坑的地方是安裝的wsgi部分模塊需要更新。B站真是個學(xué)習(xí)的地方,竟發(fā)現(xiàn)了楊老師的部署視頻...

    keke 評論0 收藏0
  • Django + Apache 部署

    摘要:站真是個學(xué)習(xí)的地方,竟發(fā)現(xiàn)了楊老師的部署視頻,楊老師的站主頁在此主頁有一系列的學(xué)習(xí)視頻,推薦干貨用于部署的項目主要用了提供后臺,所以靜態(tài)文件僅有部分的。接下來是部署和激活階段了。 吐吐槽 此篇blog將詳細(xì)記錄部署Django的每一個步驟,網(wǎng)上現(xiàn)有的教程實在太少太老了!好多坑!第一次嘗試后臺很懵,最坑的地方是安裝的wsgi部分模塊需要更新。B站真是個學(xué)習(xí)的地方,竟發(fā)現(xiàn)了楊老師的部署視頻...

    cikenerd 評論0 收藏0
  • Django + Apache 部署

    摘要:站真是個學(xué)習(xí)的地方,竟發(fā)現(xiàn)了楊老師的部署視頻,楊老師的站主頁在此主頁有一系列的學(xué)習(xí)視頻,推薦干貨用于部署的項目主要用了提供后臺,所以靜態(tài)文件僅有部分的。接下來是部署和激活階段了。 吐吐槽 此篇blog將詳細(xì)記錄部署Django的每一個步驟,網(wǎng)上現(xiàn)有的教程實在太少太老了!好多坑!第一次嘗試后臺很懵,最坑的地方是安裝的wsgi部分模塊需要更新。B站真是個學(xué)習(xí)的地方,竟發(fā)現(xiàn)了楊老師的部署視頻...

    asoren 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<