




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第python中py文件與pyc文件相互轉(zhuǎn)換的方法實例目錄1、compileallpy文件轉(zhuǎn)換為pyc1.1、compileall命令行模式1.2、compileall源碼模式2、uncompyle6pyc轉(zhuǎn)換為py文件2.1、安裝2.2、uncompyle6命令行模式2.3、uncompyle6代碼模式總結(jié)本文以Python3.8為例
1、compileallpy文件轉(zhuǎn)換為pyc
1.1、compileall命令行模式
不需要額外安裝,python自帶模塊。
可以利用Python-m的方式在命令行模式下編譯py文件。
python-mcompileall文件或路徑可選項
比如要編譯當前工作目錄下的所有py文件:
python-mcompileall.
python-mcompileall.\
比如要編譯某個指定目錄sub\dir\下的所有py文件:
python-mcompileallsub\dir\
如果只編譯某一個指定的test.py文件:
python-mcompilealltest.py
注意命令行模式下,如果不指明文件或路徑默認會將sys.path下的所有文件進行編譯!sys.path包括了當前工作目錄、Python安裝目錄、Python包目錄等。
使用上述編譯命令后會在py文件所在的同一級目錄下生成一個__pycache__文件夾,在該__pycache__文件夾下會根據(jù)py文件名稱和Python版本號生成對應(yīng)的pyc文件,比如test.py文件對應(yīng)會生成一個__pycache__\test.cpython-38.pyc文件。
下面這個例子編譯new文件夾下的py文件,通過tree命令可以看到編譯后的文件結(jié)構(gòu):
E:\juzicodepython-mcompileallnew
Listingnew...
Compilingnew\\build.py...
Compilingnew\\test.py...
E:\juzicodetreenew/f
卷xyz的文件夾PATH列表
卷序列號為000000
E:\JUZICODE\NEW
│build.py
│test.py
│
└─__pycache__
build.cpython-38.pyc
test.cpython-38.pyc
使用python-mcompileall-h可以看到幫助文檔和可選項的含義:
-l:不遞歸編譯子文件夾;
-rlevel:指定編譯文件夾的層數(shù),優(yōu)先級高于-l;level=0表示不進入下一層,levle=1表示進入第一層,level=2表示進入第二層,以此類推。
-f:強制重新編譯一次,即使文件的時間戳沒有更新,當沒有使用-f選項時,如果py文件的時間戳更早于pyc文件,不會觸發(fā)編譯過程;
-xREG:根據(jù)REG表示的正則式選擇文件編譯。
1.2、compileall源碼模式
compileall還提供源碼方式編譯py文件,同樣會生成__pycache__文件夾及在該文件夾下的pyc文件。
首先導(dǎo)入compileall模塊,使用pile_file(py文件名稱)編譯py文件:
importcompileall
pile_file('test.py')
-----結(jié)果:
Compiling'test.py'...
另外也可以使用pile_dir(路徑名稱)編譯某個路徑下的py文件:
importcompileall
pile_dir('new')
-----結(jié)果:
Listing'new'...
Listing'new\\mod'...
Compiling'new\\mod\\mod.py'...
Compiling'new\\test.py'...
Compiling'new\\xyz.py'...
還有一個不常用的方法是pile_path()會編譯sys.path路徑下的py文件。
2、uncompyle6pyc轉(zhuǎn)換為py文件
2.1、安裝
可以使用uncompyle6將pyc文件轉(zhuǎn)換回py文件,在Python3.8中需要額外安裝uncompyle6模塊:
pipinstalluncompyle6
安裝之后就會在Python安裝目錄的scripts文件夾下生成一個uncompyle6.exe的可執(zhí)行文件:
一般在安裝時添加過安裝目錄到環(huán)境變量下,這時就可以直接運行uncompyle6。
2.2、uncompyle6命令行模式
下面這個例子用命令uncompyle6test.pyc解析test.pyc文件并輸出解析后的內(nèi)容:
E:\juzicode\pyc-2-pyuncompyle6test.pyc
importsys
print(sys.version)
從解析的內(nèi)容可以看到使用的uncompyle6的版本號、Python的版本號、編譯成pyc時的編譯時間、源代碼的內(nèi)容等。
上面這種命令方式只是將解析后的內(nèi)容輸出到控制臺,如果要將解析結(jié)果生成py文件,則可以將打印輸出重定向到文件里:
uncompyle6test.pyctest.py
這樣在當前目錄下就生成了一個test.py文件,文件內(nèi)容和前述例子打印輸出內(nèi)容一致。
另外一種方法是使用-o選項+目標文件路徑+pyc文件(可以是多個),在目標文件路徑下輸出和pyc同名的py文件:
E:\juzicode\pyc-2-pyuncompyle6-o.\build.pyctest.pyc
build.pyc--
test.pyc--decompiled2files:2okay,0failed
2.3、uncompyle6代碼模式
先用open方法創(chuàng)建一個文件實例pf,再使用decompile_file(pyc文件,pf)函數(shù)將pyc文件轉(zhuǎn)換為py
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年地理信息技術(shù)在氣象預(yù)報的模擬試卷及答案(初中水平)
- 2025年大學統(tǒng)計學期末考試-統(tǒng)計數(shù)據(jù)可視化案例分析試題
- 2025年鄉(xiāng)村醫(yī)生考試題庫:農(nóng)村婦幼保健知識解析與練習
- 2025年消防員職業(yè)技能鑒定考試:職業(yè)道德素養(yǎng)與消防法規(guī)應(yīng)用試題型
- 2025年鄉(xiāng)村醫(yī)生農(nóng)村婦幼保健知識鄉(xiāng)村醫(yī)療資源分配試題
- 2025年統(tǒng)計學期末考試題庫:統(tǒng)計與決策案例分析試卷集
- 2025年區(qū)塊鏈工程師職業(yè)能力測試卷:區(qū)塊鏈跨鏈技術(shù)試題
- 2025年電工中級職稱考試試卷:電力系統(tǒng)運行與維護管理技能測試題
- 2025年鋼琴演奏級考試模擬試卷:鋼琴演奏與音樂理解試題
- 教師資格《綜合素質(zhì)》2025年考試教育案例試題(含答案)
- 生物力學正畸方案優(yōu)化-洞察及研究
- 污廢水減污降碳協(xié)同評估指南
- 2025年上海市(秋季)高考語文真題詳解
- 類風濕關(guān)節(jié)炎達標治療
- 電力工程電纜設(shè)計課件
- 衢州學院十五五校園及校園文化建設(shè)規(guī)劃
- 葡萄田租賃合同協(xié)議書
- 哈爾濱工業(yè)大學介紹
- 醫(yī)療行業(yè)中的新檢驗技術(shù)推廣與普及
- 貼磚包工協(xié)議書模板
- 三相電協(xié)議合同
評論
0/150
提交評論