1. 程式人生 > >如何打包python應用(一)

如何打包python應用(一)

對於python程式設計之後,除了在Python IDE中執行之外,可以將python的程式打包為python應用,直接在PC環境上執行。對於python打包目前有很多第三方庫檔案直接使用。在這裡主要介紹一下cx freeze和pyinstaller兩種

cx-freeze:

1. 安裝步驟:
step1: 安裝,pip install cx_freeze
step2:在cmd中,切換到Python安裝目錄的Scripts目錄,比如我的為c:\Python32\Scripts 執行cxfreeze-postinstall
python cxfreeze-postinstall
step3

:檢測是否安裝成功,cxfreeze -h

cxfreeze-h

2. cx-freeze打包:
打包命令:python setup.py build

其中打包的指令碼命令如下:

python setup.py build

setup.py

import sys
from cx_Freeze import setup, Executable
#打包所需要的第三庫
build_exe_options = {"packages": ["sys"], "includes ": ['PyQt5.QtGui','xlsxwriter','xlrd','PyQt5.QtWidgets','PyQt5.QtCore'
,'PyQt5.QtPrintSupport']} base = None if sys.platform == 'win32': base = 'Win32GUI' options = { 'build_exe': { 'includes': 'atexit' } } executables = [ Executable('mainPage.py', base=base), Executable('creatDetailTable.py'), Executable('creatTable.py'), Executable('databaseOpetation.py'
), Executable('dataManager.py'), Executable('fileReader.py') ] setup(name='education', version='0.1', description='education software', options=options, executables=executables )

3. 打包指令碼說明:
build_exe_options 打包所需的第三方庫
executables 可執行的檔案
setup 可執行檔案相關資訊

4. 打包過程:
python原始檔,路徑C:\Python33\Lib\site-packages\cx_Freeze\samples\eduaction
包含六個原始檔mainPage.py,creatDetailTable.py,creatTable.py,databaseOpetation.py,dataManager.py,dataManager.py
這裡寫圖片描述

打包library.zip,其中所需的dll庫和第三方庫檔案:
這裡寫圖片描述

將所需檔案拷貝到打包的exe檔案中
這裡寫圖片描述

最終的打包結果:
這裡寫圖片描述
在打包的結果中可以看見,cx-freeze將每個python檔案都打包為exe檔案,並且將所需的dll和pyd資原始檔都打包到對應的目錄中。

打包生成的檔案結構:

檔案目錄:
│  creatDetailTable.py
│  creatTable.py
│  databaseOpetation.py
│  dataManager.py
│  fileReader.py
│  mainPage.py
│  setup.py
│ 
└─build
    └─exe.win32-3.3
        │  creatDetailTable.exe
        │  creatTable.exe
        │  databaseOpetation.exe
        │  dataManager.exe
        │  fileReader.exe
        │  icudt49.dll
        │  icuin49.dll
        │  icuuc49.dll
        │  libGLESv2.dll
        │  library.zip
        │  mainPage.exe
        │  pyexpat.pyd
        │  PyQt5.QtCore.pyd
        │  PyQt5.QtGui.pyd
        │  PyQt5.QtPrintSupport.pyd
        │  PyQt5.QtWidgets.pyd
        │  python33.dll
        │  pywintypes33.dll
        │  Qt5Core.dll
        │  Qt5Gui.dll
        │  Qt5PrintSupport.dll
        │  Qt5Widgets.dll
        │  select.pyd
        │  sip.pyd
        │  sqlite3.dll
        │  unicodedata.pyd
        │  win32api.pyd
        │  _bz2.pyd
        │  _decimal.pyd
        │  _elementtree.pyd
        │  _hashlib.pyd
        │  _lzma.pyd
        │  _socket.pyd
        │  _sqlite3.pyd
        │  _ssl.pyd
        │ 
        ├─imageformats
        │      qgif.dll
        │      qico.dll
        │      qjpeg.dll
        │      qmng.dll
        │      qsvg.dll
        │      qtga.dll
        │      qtiff.dll
        │      qwbmp.dll
        │     
        └─platforms
                qminimal.dll
                qoffscreen.dll
                qwindows.dll

5. 程式執行:
由於mainPage.exe為程式的入口函式,因此執行mainPage.exe可以正常執行。由於在win7上編譯生成的,需要在其他平臺上已經執行檢測。

資料夾中已經添加了必要的dll,但在其他機子上執行程式失敗,出現了下面的情況,只能在本機執行,不能在其他機器上進行執行在xp的平臺上執行,發現失敗如下:
這裡寫圖片描述

使用Process Explorer檢視程式所使用的dll
Process Explorer是一個很有用的工具。由Sysinternals開發的Windows系統和應用程式監視工具,目前已併入微軟旗下。不僅結合了Filemon(檔案監視器)和Regmon(登錄檔監視器)兩個工具的功能,還增加了多項重要的增強功能。包括穩定性和效能改進、強大的過濾選項、修正的程序樹對話方塊(增加了程序存活時間圖表)、可根據點選位置變換的右擊選單過濾條目、整合帶原始碼儲存的堆疊跟蹤對話方塊、更快的堆疊跟蹤、可在 64位 Windows 上載入 32位 日誌檔案的能力、監視映像(dll和核心模式驅動程式)載入、系統引導時記錄所有操作等。(來自百度百科的解釋),既然可以監視dll,那麼在釋出程式前,可以用Qt Creator執行將要釋出的程式,在Process Explorer中檢視exe使用的dll,一般來說,程式執行失敗很可能就是少了對應的dll檔案。

如下是本例程式所需要的dll列表:
這裡寫圖片描述

將所需的dll檔案全部拷貝到exe檔案同級目錄中,在xp系統上可以正常執行。

注意事項:

1、cx-freeze不能將所需檔案打包為單個的可執行檔案,需要進行二次的打包;
2、跨平臺的時候可能存在缺少dll檔案的可能性,因此需要在release的時候將所有的dll檔案都打包到一起;

參考資源: