python中py文件與pyc文件相互轉(zhuǎn)換的方法實例_第1頁
python中py文件與pyc文件相互轉(zhuǎn)換的方法實例_第2頁
python中py文件與pyc文件相互轉(zhuǎn)換的方法實例_第3頁
python中py文件與pyc文件相互轉(zhuǎn)換的方法實例_第4頁
python中py文件與pyc文件相互轉(zhuǎn)換的方法實例_第5頁
已閱讀5頁,還剩1頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論