當我們我們編寫python程序後,我們有時會將程序打包成不依賴python環境的exe程序,這時我們可以使用PyInstaller這個包來打包我們的程序,使其成爲可以直接運行的exe程序,本人第一次打包的時候遇到了許多坑,在這裏記錄一下,同時也可以給大家一點參考。
首先我們使用pip下載PyInstaller這個包,同時我們會安裝一些其他的依賴包,如果安裝失敗,需要看看依賴的包是否正確安裝了,最好在一臺乾淨的機器上運行,以免遇到一些不可知的問題。
下載好PyInstaller之後,我們有兩種方法可以打包,最簡單的就是使用命令Pyinstaller 你的Python文件.py
然後就會在目錄下生成Build和dist文件夾,dist文件夾下就是打包好的應用程序,這裏值得提一下的就是build文件夾中存在一個warnxxxx.txt文件,記錄了打包的出錯信息,當打包失敗或者程序無法運行時我們可以查看該文件來定位出錯點,看是不是一些依賴或者包不存在,沒打包進去。
以上是最簡單的打包方法,但由於我們可能需要打包一些資源文件或者程序圖標時,我們就需要寫.spec文件告訴pyinstaller我們還需要打包哪些東西,這裏貼一下本人自己打包時用的.spec結構:
# -*- mode: python -*-
block_cipher = None
a = Analysis(['你的Python——main文件.py'],
pathex=['需要打包的文件夾目錄'],
binaries=[],
datas=[
需要打包的配置或者資源文件
],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
exclude_binaries=True,
name='打包後的程序名',
debug=False,
strip=False,
upx=True,
console=False , icon='程序用到的圖標')
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
name='打包後的程序名')
當我們寫好後就可以執行pyinstaller 你寫好的spec文件.spec
命令,同樣會生成build和dist將我們的程序打包爲exe程序。
最後的一個坑就是本人寫的程序在%AppData%中新建了用戶文件,存放了之前調試產生的一些文件,忘了刪除導致程序運行時一直報錯,重新打包了很多遍,最後刪了了該文件夾中的信息纔打包完成。
關於.spec文件的寫法和pyinstaller的使用推薦看官方文檔,本人在這裏知識作爲一個記錄以及簡單的使用介紹。