手動製作python的exe可執行程式

2021-06-26 21:42:50 字數 2460 閱讀 5885

手動製作python的exe可執行程式 -- by leo jay

python沒有內建乙個編譯為exe的功能。給python程式的部署帶來不少的麻煩。

所以就會出現一些py2exe之類的很不錯的工具,用於自動把.py檔案編譯為.exe檔案。

最近抽空研究了一下手動實現類似py2exe的功能,希望加強對python的了解。

結果還相當不錯。把結果記錄下來,與大家共享。

文中所描述的方法,基於python的以下幾個功能

1. python程式執行時,會在sys.path指定的路徑中查詢庫檔案。

2. python從2.3開始,支援從zip檔案中import庫(支援.py,.pyc和.pyo,但不支援.pyd)

3. python提供c api,讓c語言的程式,可以很方便的呼叫python的程式

注:假設python安裝在c:\python25目錄中,最後的可執行檔案放到d:\dist目錄中

1. 先去c:\python25\lib目錄,把所有檔案都複製出來,比如複製到d:\pythonlib目錄中

2. 開乙個cmd視窗,進入d:\pythonlib目錄中,執行 python -oo compileall.py -f . 把lib中的.py檔案都編譯成.pyo檔案

3. 刪除d:\pythonlib目錄中所有的.py和.pyc檔案,因為我們只要有.pyo檔案就可以讓這些庫執行了。

4. 刪除目錄中所有用不著的檔案,比如curses,test,idlelib,msilib等,以減少生成檔案的體積。

5. 把這些庫打包成乙個zip檔案,比如stdlib.zip,放到d:\dist目錄中

6. 把c:\python25\dlls目錄中的.pyd和.dll檔案,複製到d:\dist\dlls目錄中,當然,刪除不可能用到的一些檔案_msi.pyd,_ssl.pyd等等,可以減少檔案的體積

7. 把自己寫的程式,也按步驟2至步驟5所說的方法,打成乙個mysrc.zip包,放到d:\dist目錄中。注意:自己寫的程式的入口應該是main.pyo檔案

8. 用以下c程式編譯出乙個可執行檔案,比方說叫runpy.exe,也放到d:\dist中。

#include 

<

python.h

>

#include

<

windows.h

>

#include

<

stdlib.h

>

#include

<

stdio.h

>

intmain()

*p =0

;

//設定執行時的path

sprintf(szcmd,

"path=%s\\dlls;%%path%%

", szpath);

_putenv(szcmd);

//把sys.path設定為['.', '自己的源**zip檔案', '標準庫zip檔案', 'dll目錄']

//然後呼叫main模組

sprintf(szcmd,

"import sys\n""

sys.path=['.', r'%s\\mysrc.zip', r'%s\\stdlib.zip', r'%s\\dlls']\n""

import main\n",

szpath, szpath, szpath);

py_optimizeflag =2

; py_nositeflag =1

; py_initialize();

pyrun_******string(szcmd);

return0;

}

9. 把python25.dll放到d:\dist目錄中。

這樣來,d:\dist目錄中,一共只有4個檔案加乙個目錄:

注:當然,這種打包方式第一次做的時候比較麻煩,但之後就可以只要把自己的程式打包就好了,其它的不用變。

而且,如果自己的程式經常做改動的話,自己的程式也可以不打包,直接放到d:\dist中,反正runpy.exe啟動程式的時候,只要能正常執行import main就可以了。

以及基於3.1.2版本的包: python31-dist.7z

注:3.1.2依賴於visual c++ 2008 redistributable package. 如果在目標機器上沒有安裝,則程式執行不起來。

解開包後,只要用自己的程式替換mysrc.zip就可以使用了。

包裡有runpy.exe和runpyw.exe兩個檔案。其中,runpy.exe是控制台程式,runpyw.exe是非控制台程式。這兩個程式分別類似於python.exe和pythonw.exe。想讓程式執行時出現乙個控制台,就執行runpy.exe,如果不想出現黑黑的控制台,就執行runpyw.exe。

手動製作python安裝模組

1.把所有寫好的模組放到乙個資料夾 test 2.在同級目錄新建乙個setup.py檔案如。setup.py檔案 from distuils.core import setup setup name mytest version 0.10 description my test module aut...

製作python指令碼為exe檔案

pip install pyinstaller 建立名為aaa.py的指令碼檔案 功能列印輸入的文字資訊。while 1 print input data input print input data 在當前路徑下開啟終端,鍵入如下命令 pyinstaller w f c aaa.py 表示一些引數...

Python製作exe檔案簡單流程

一 什麼是exe?exe是windows環境中的副檔名之一,它是乙個可執程式設計客棧行檔案,雖然擴充套件程式在一般情況下是隱藏的,但是我們可以通過取消選中資源管理器資料夾的高階設定中的 不顯示已註冊的副檔名 來顯示它。可執行檔案意味著它是乙個可以由其自身執行的檔案,而不是其他程式。例如,在pytho...