python編程-將Python程式轉化為可執行程式[整理]
最後更新:2016-06-06
來源:互聯網
上載者:User
工欲善其事,必先利其器.python是解釋型的語言,但是在windows下如果要執行程式的話還得加個python shell的話,未免也太麻煩了.而這裡所說的東西就是將python程式轉換為exe檔案.下面是一些常用的工具,不過似乎py2exe應用的更加廣泛一些.
py2exe http://py2exe.sf.net
只支援windows平台,應該是大家聽到最多的一個名字了,使用者不少,所以有問題的話在它的mail list裡面很容易找到答案。文檔中提到了"無法找到某某code"、使用opengl等模組的問題
PyPackage http://codereactor.net/projects/pypack/index.html
我覺得py2exe等等工具還是羅嗦得像唐僧,需要在設定檔中寫上需要的資料檔案。作者完全無視這樣一個事實:我需要發布可執行檔的時候,程式已經完工了,所有的資料檔案就在主程式所在目錄下,所以多數情況下,根本不用到別的地方搜尋。現在終於有人站了出來,PyPackage實際上並不是一個程式打包的工具,而只是簡化py2exe的操作,甚至可以自動調用InnoSetup 5製作安裝檔案——不過這個軟體並不智能,會打包很多不需要的檔案
Installer http://www.mcmillan-inc.com/installer_dnld.html
可以產生windows、linux平台的可執行檔,現在作者首頁連不上去了,但是搜尋一下可以在其它地方下載
內建一個小程式寫設定檔,如果程式較複雜,還是需要手工修改這個設定檔。支援從py15以來的所有Python版本
2005年9月,冰凍牡蠣更新:Giovanni Bajo獲得Gordon McMillan's Installer的授權、著作權改變為GPL,並在http://pyinstaller.hpcf.upr.edu/繼續開發PYinstaller。2006年9月更新:這裡可以看到Gordon McMillan's的原始網站的鏡像
Python內建的freeze.py(不過windows版本不帶這個,你可以自己下載Python的來源程式再找)。這個是我最不推薦的一種方法(為什嗎?自己看),不過如果你的Python程式要發布到其它工具不支援的平台上,可以考慮這個方法
新出來的Pyco http://www.pythonapocrypha.com/projects/pyco/
還沒用過
Squeeze http://starship.python.net/crew/fredrik/ipa/squeeze.htm
還沒用過,只支援Python 1.4
cx_Freeze http://starship.python.net/crew/atuining/cx_Freeze/
winodws、linux平台。簡單的程式甚至都不需要寫設定檔
Stand alone Python for Windows http://arctrix.com/nas/python/standalone.html
如果你不介意來源程式太過"暴露"的話,用這個吧
會不會覺得Updated: Sun, 09 Apr 2000 18:39:54 -0600 紮眼?如果你看一看它的VC原始碼,就不會這麼想了——其實這是普遍適用於win系統的方法,無論是98、2000或者xp。也許也可以用到linux上——我不懂linux,如果真的可以這麼做,還請告訴我。
py2app http://undefined.org/python/
支援linux平台的工具可能也支援mac os,或者直接使用這個py2app。具體就不知道了,只吃過蘋果,還沒玩過蘋果呢
Movable Python http://www.voidspace.org.uk/python/movpy/
這個其實是使用py2exe製作的、可以放在隨身碟上的綠色Python。有使用py2app製作蘋果版movpy和用cx_Freeze製作Linux版movpy的計劃。懶到都不願意學習py2exe、py2app或者cx_Freeze的人可以看看。
Shed Skin - A Python-to-C++ Compiler: 實驗項目,windows上,連他的例子我都沒有編譯成功 :(。
Psyco: 給Python程式加速的東西,看不出對發布Python程式的直接好處,並且作者以後將致力於PyPy。
PyPy: 項目目標是純Python實現的Python、速度比CPython快,將來可以協助實現編譯Python。
pyc: Python compiler in Python,一個用純Python寫的Python的bytecode編譯器,可以最佳化輸出的pyc檔案。和PyPy一樣,現在還看不出對發布Python程式的直接好處。只有py24的bytecode。pyc是pyvm這個新的python虛擬機器的一部分。
Jungle: 使用GNU工具(as、ld和winres)把Python程式編譯到windows的exe可執行檔。該可執行檔只使用基於python24的的pythonic.dll。猜測它支援的模組僅限於內部模組以及jungle.jgl列出的模組。只有可執行檔下載,而這個可執行檔也是用Jungle自己編譯的。目前版本號碼都到1.10了,經常看0.xx的版本號碼,這個數字好大啊,娃哈哈。
另類的方法,對Python語言特性都還不是100%支援,眾多的CPython模組也不可以使用,還有,我也沒有試過:
for .NET的Python編譯器(如Visual Python、IronPython),不過我可不喜歡為了一個芝麻大的軟體安裝.NET framework
用jython,然後用jbuilder、jsmooth、NativeJ之類的包裹一下,或者用gcj編譯成本地代碼
在最後,給一個人學習py2exe的文章,協助學習:
最近學了一點PYTHON,想把PYTHON寫的程式轉換成EXE檔案,在網上查到了資料後發現了這個東東
寫下來做一下記錄。
英文教程:
http://www.py2exe.org/index.cgi/Tutorial
Python 2.5 + Py2exe
工作目錄:c:\python25
首先隨便寫一個程式
hello.py
print "Hello World!"
測試一下是否能運行
python hello.py
結果:Hello World
到www.py2exe.org下載 PY2exe ,或者在SF上下載
http://sourceforge.net/project/showfiles.php?group_id=15583
接下來直接安裝PY2EXE包。。它是一個安裝檔案。。直接裝就行了。
下在編寫一個設定的PY檔案 setup.py
from distutils.core import setup
import py2exe
setup(console=['hello.py'])
運行:python setup.py py2exe
出現以下資訊後,在DIST目錄裡,就會有一個hello.exe
即成功。
running py2exe
*** searching for required modules ***
*** parsing results ***
creating python loader for extension 'zlib'
creating python loader for extension 'unicodedata'
creating python loader for extension 'bz2'
*** finding dlls needed ***
*** create binaries ***
*** byte compile python files ***
byte-compiling C:\Tutorial\build\bdist.win32\winexe\temp\bz2.py to bz2.pyc
byte-compiling C:\Tutorial\build\bdist.win32\winexe\temp\unicodedata.py to unicodedata.pyc
byte-compiling C:\Tutorial\build\bdist.win32\winexe\temp\zlib.py to zlib.pyc
skipping byte-compilation of c:\Python24\lib\StringIO.py to StringIO.pyc
[skipping many lines for brevity]
skipping byte-compilation of c:\Python24\lib\warnings.py to warnings.pyc
*** copy extensions ***
*** copy dlls ***
copying c:\Python24\lib\site-packages\py2exe\run.exe -> C:\Tutorial\dist\hello.exe
*** binary dependencies ***
Your executable(s) also depend on these dlls which are not included,
you may or may not need to distribute them.
Make sure you have the license if you distribute any of them, and
make sure you don't distribute files belonging to the operating system.
ADVAPI32.dll - C:\WINDOWS\system32\ADVAPI32.dll
USER32.dll - C:\WINDOWS\system32\USER32.dll
SHELL32.dll - C:\WINDOWS\system32\SHELL32.dll
KERNEL32.dll - C:\WINDOWS\system32\KERNEL32.dll