python compileall 打包發布


Python工程的編譯、合並、打包、發布

from:https://my.oschina.net/bfbd/blog/864310

確保要發布的包(demo)的根目錄中有__main__.py文件,這個是程序執行入口。

編譯

python3 -O -m compileall demo

批量改名.pyc文件

 find . -name '*.pyc' -exec rename 's/.cpython-35.opt-1//' {} \; 

移動.pyc文件

find . -name '*.pyc' -execdir mv {} .. \; 

清理.py文件

find . -name '*.py' -type f -print -exec rm {} \; 

清理__pycache__文件夾

find . -name '__pycache__' -exec rmdir {} \;

打包成zip

zip -r pub.zip ./demo/*

 運行時只要將zip文件作為參數即可

python3 pub.zip

 

最終整合腳本

cd $1 python3 -O -m compileall . find . -name '*.pyc' -exec rename 's/.cpython-35.opt-1//' {} \; find . -name '*.pyc' -execdir mv {} .. \; find . -name '*.py' -type f -print -exec rm {} \; find . -name '__pycache__' -exec rmdir {} \; zip -r ../$1.zip ./* 

調用方式 

chmod +x pycompile.sh ./pycompile.sh demo

Python代碼的編譯

from:http://www.cnblogs.com/zhangzl419/p/7116158.html

Python代碼的編譯


Python代碼在解釋執行之前,是會被編譯成.pyc或者.pyo文件的,它們是中間字節碼表示的文件,之后Python虛擬機才會去解釋執行它們。

 

1、pyc文件

=========

pyc是一種二進制文件,是由py文件經過編譯后,生成的文件,是一種byte code,py文件變成pyc文件后,加載的速度有所提高。

而且pyc是一種跨平台的字節碼,是由python的虛擬機來執行的,這個是類似於JAVA或者.NET的虛擬機的概念。

pyc的內容,是跟python的版本相關的,不同版本編譯后的pyc文件是不同的。

 

2、pyo文件

==========

pyo是優化編譯后的程序 python -O 源文件即可將源程序編譯為pyo文件。

 

3、把單個文件編譯成pyc

====================

用如下代碼

import py_compile

py_compile.compile(r'H:\game\test.py')

或者

python -m py_compile test.py

這樣會在test.py文件所在的目錄下,生成一個__pycache__(注意:這里目錄名前后有兩個下划線)的目錄,並且其中存有一個test.cpython-35.pyc文件,這個pyc文件就是test.py編譯之后生成的文件。

 

4、把一個目錄下所有python源文件編譯pyc

===================================

一般來說,我們的工程都是在一個目錄下的,一般不會說僅僅編譯一個py文件而已,而是需要把整個文件夾下的py文件都編譯為pyc文件,python又為了我們提供了另一個模塊:compileall 。使用方法如下:

import compileall

compileall.compile_dir(r'/root/src')

也可以直接用命令行編譯一個目錄下的文件

python -m compileall /root/src/

這樣就會在/root/src目錄下生成一個新的目錄__pycache__,這個目錄的下面會存放所有的和python源代碼對應的pyc文件

比如源代碼目錄結構如下

/root/src

          |---test.py

          |---test2.py

          |---test3.py

編譯后目錄結構會變成如下:

/root/src

          |---test.py

          |---test2.py

          |---test3.py

          |---__pycache__

                    |----test.cpython-35.pyc

                    |----test2.cpython-35.pyc

                    |----test3.cpython-35.pyc

 

以上就是Python編譯的基本知識。

 

注意:

compileall.compile_path(skip_curdir=Truemaxlevels=0force=Falsequiet=0legacy=Falseoptimize=-1)

字節編譯沿 sys.path 找到的所有 .py 文件。如果所有文件都已成功編譯,則返回true值,否則返回false值。

如果 skip_curdir 為true(默認值),則當前目錄不包括在搜索中。所有其他參數傳遞到 compile_dir() 函數。注意,與其他編譯函數不同,maxlevels 默認為 0

在 3.2 版更改: 添加了 legacy 和 optimize 參數。

在 3.5 版更改: quiet 參數更改為多級值。

在 3.5 版更改: legacy 參數只寫出 .pyc 文件,而不是 .pyo 文件,無論 optimize 的值是什么。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM