摘要:不知道你們是否注意到,通過(guò)這個(gè)命令安裝庫(kù)后,也會(huì)自動(dòng)生成對(duì)應(yīng)的文件。但是通過(guò)程序或者顯示安裝已安裝文件就會(huì)發(fā)現(xiàn),包中只包含了文件,并沒(méi)有包含文件。也就是說(shuō),在包安裝時(shí),在腳本執(zhí)行過(guò)程中堆剛安裝的腳本進(jìn)行了編譯,生成了文件。
問(wèn)題
使用Ubuntu系統(tǒng)或者其他基于deb包管理器系統(tǒng)的人,經(jīng)常通過(guò)apt-get install命令來(lái)安裝Python的庫(kù)。不知道你們是否注意到,通過(guò)這個(gè)命令安裝Python庫(kù)后,也會(huì)自動(dòng)生成對(duì)應(yīng)的.pyc文件。但是通過(guò)synaptic程序或者dpkg -L package-name顯示安裝已安裝文件就會(huì)發(fā)現(xiàn),deb包中只包含了.py文件,并沒(méi)有包含.pyc文件。那么這些.pyc文件是從哪里來(lái)的呢?
答案我們以python3-bs4包為例來(lái)說(shuō)明。如果你安裝過(guò)這個(gè)包,那么你可能可以從系統(tǒng)的/var/cache/apt/archives中找到python3-bs4*.deb文件。如果找不到,你可以用下面的命令下載一個(gè):
apt-get download python3-bs4
下載后,使用系統(tǒng)自帶的Archive Manager打開(kāi)這個(gè)這個(gè)deb文件來(lái)查看內(nèi)容,如下圖所示:
其中,要安裝的文件是usr目錄,安裝包的元信息在DEBIAN目錄下。我們進(jìn)入到DEBIAN目錄下來(lái)看看:
從上圖可以看出,這里免包含了deb包的很多控制文件,我們要關(guān)注的是postinst這個(gè)文件,這個(gè)文件是安裝完包的內(nèi)容之后要執(zhí)行的腳本,來(lái)看下內(nèi)容:
postinst文件就是一個(gè)shell腳本,主要工作是執(zhí)行py3compile這個(gè)命令,該命令是一個(gè)Python腳本,專(zhuān)門(mén)用于在安裝deb包格式的Python庫(kù)的過(guò)程中生成對(duì)應(yīng)的.pyc文件。也就是說(shuō),在deb包安裝時(shí),在post-install-script腳本執(zhí)行過(guò)程中堆剛安裝的Python腳本進(jìn)行了編譯,生成了.pyc文件。
deb包的內(nèi)容也可以通過(guò)如下命令來(lái)查看,這里直接給出示例:
~/tmp/deb$ ls python3-bs4_4.3.2-1ubuntu1_all.deb ~/tmp/deb$ ar vx python3-bs4_4.3.2-1ubuntu1_all.deb x - debian-binary x - control.tar.gz x - data.tar.xz ~/tmp/deb$ ll total 128 -rw-r--r-- 1 diabloneo diabloneo 1709 Dec 17 22:21 control.tar.gz -rw-r--r-- 1 diabloneo diabloneo 58368 Dec 17 22:21 data.tar.xz -rw-r--r-- 1 diabloneo diabloneo 4 Dec 17 22:21 debian-binary -rw-rw-r-- 1 diabloneo diabloneo 60270 Jun 5 2014 python3-bs4_4.3.2-1ubuntu1_all.deb ~/tmp/deb$ tar -tf control.tar.gz ./ ./postinst ./prerm ./md5sums ./control
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/45317.html
摘要:打包成單文件所使用的命令為打包成文件夾所使用的命令為不管是哪種打包方式都會(huì)留下一個(gè)文件。這樣我們只需將腳本文件和腳本文件放置到同一文件夾下,運(yùn)行我們的腳本??梢钥吹揭呀?jīng)完美的反編譯出其中的腳本好了,相信大家已經(jīng)明白了反編譯的原理。 近期閱讀了一篇很感興趣的文章,為免后續(xù)文章被刪無(wú)法再閱讀,現(xiàn)...
摘要:淺析參數(shù)說(shuō)明對(duì)于所有列表里提到的純模塊做處理需要在腳本里有一個(gè)包名到目錄的映射。闡明包名到目錄的映射,見(jiàn)鍵代表了包的名字,空的包名則代表不在任何包中的頂層包。最終會(huì)在下生成可執(zhí)行文件,調(diào)用制定的函數(shù)實(shí)例分析 python setup.py 淺析 setuptools.setup() 參數(shù)說(shuō)明 packages 對(duì)于所有 packages 列表里提到的純 Python 模塊做處理 需要...
摘要:找到模塊文件之后,將其編譯成字節(jié)碼,就是那個(gè)文件里面的關(guān)于字節(jié)碼,下面會(huì)介紹,請(qǐng)繼續(xù)閱讀。當(dāng)然,如果根本就沒(méi)有找到同名的源文件,只有字節(jié)碼文件,那么就只能運(yùn)行這個(gè)了。執(zhí)行就是前面已經(jīng)編譯的模塊字節(jié)碼文件,順理成章要執(zhí)行了。 不管是用import還是用from mmmm import *的方式導(dǎo)入模塊,當(dāng)程序運(yùn)行之后,回頭在看那個(gè)存儲(chǔ)著mmmm.py文件的目錄中(關(guān)于mmmm.py文件可...
摘要:是回調(diào)函數(shù),當(dāng)鏈接服務(wù)器和相應(yīng)數(shù)據(jù)傳輸完畢時(shí)觸發(fā)本函數(shù)可選。僅僅是針對(duì)的,在中,已經(jīng)沒(méi)有這個(gè)模塊了,取代它的是。由于以流式讀取文件,從而速度較快,切少占用內(nèi)存,但是操作上稍復(fù)雜,需要用戶(hù)實(shí)現(xiàn)回調(diào)函數(shù)。 編寫(xiě)模塊 模塊是程序 模塊就是一個(gè)擴(kuò)展名為.py的Python程序。 編寫(xiě)模塊 #!/usr/bin/env python # coding=utf-8 lang = python 引...
Python在什么時(shí)候會(huì)生成pyc文件呢? ??事情大概是這樣的,之前我一直以為python文件在執(zhí)行過(guò)之后就會(huì)生成pyc文件,后來(lái)一次偶然情況下,發(fā)現(xiàn)還是自己too young too simple,在看過(guò)其他大神文章并且自己驗(yàn)證之后,發(fā)現(xiàn)還是有點(diǎn)意思的,權(quán)當(dāng)沒(méi)事寫(xiě)點(diǎn)文章吧。 什么是pyc文件呢? ??簡(jiǎn)單來(lái)說(shuō),pyc文件就是Python的字節(jié)碼文件,我們都知道Python是一種全平臺(tái)的解釋性語(yǔ)...
閱讀 2203·2023-04-25 19:06
閱讀 1408·2021-11-17 09:33
閱讀 1794·2019-08-30 15:53
閱讀 2616·2019-08-30 14:20
閱讀 3576·2019-08-29 12:58
閱讀 3575·2019-08-26 13:27
閱讀 533·2019-08-26 12:23
閱讀 516·2019-08-26 12:22