Pyinstaller打包exe附帶圖片的方法
畢設寫的工具最近才想起來應該做成個exe造福大眾,奈何路途曲折
先是vs直接裝的pyinstaller不管用;後是不知如何打多個檔案的專案(最後寫在一個.py裡了……還有import的包儘量減少了);最後是圖片檔案不會打包在一起,讓我有種擦屎擦不乾淨的不爽的感覺——一個小exe還必須和幾個固定命名的圖片在一個資料夾內不然打不開!!
今天看了看了不少帖子,方法有的簡單但是不成功;有的麻煩,要改的東西有點多就不想嘗試;最後看著錯誤提示加思考終於成功的打了個exe!
pyinstaller的安裝:
單個exe啥也不用的話,下面的命令就夠了。
pyinstaller -F test.py
接下來介紹打包圖片的方法。
pyinstaller options name.spec
這句程式碼執行不了啊……
本教程完整過程開始:
生成spec檔案:
這是我要打包的東西。(接下來的檔名都參照這個)
然後cmd到這個目錄,(我是當前資料夾直接按住shift+右鍵,單擊“在此處開啟powershell視窗”,效果一樣還方便)
在cmd裡輸入 :
pyi-makespec FP.py
會生成一個FP.spec
然後改FP.spec裡面的東西,下面是原樣
直接打這個檔案的包出來的是……如下,我可不想把工具做的這麼複雜……
.py圖片引用完整路徑
改之前,需要把你python程式裡的所有的圖片引用換成完整的路徑:
程式碼裡就這麼用圖片嘍……
此方法有參照http://tieba.baidu.com/p/3060401749的第6樓(看他jia加的函式,就是獲取完整路徑而已),再加再一篇帖子裡看到“pyinstaller不是將程式碼編譯,而是將指令碼弄成可以執行的檔案,所以別想能打包後程序變快”,由此猜想到“圖片需要完整路徑,spec檔案裡也要寫上完整路徑,這樣就能讓這個exe‘接軌’執行起來”
開始改spec檔案:
但是datas並不是datas+=[('_pic.png','D:\\XiutuDog\\_pic.png','DATA')],會報錯“expected tuple,not list”,
於是我是這麼改的datas+=(('_pic.png','D:\\XiutuDog\\_pic.png','DATA'))
紅框是三張我需要的圖片,格式是 (('名字1','1的完整路徑','型別'),('名字2','2的完整路徑','型別'))
左邊的橙色箭頭是是否顯示控制檯的cmd黑框
右邊的橙色箭頭是加上去的,可以給自己的exe換圖示【但是離開資料夾就不是這個圖示了,現在還沒解決】
全文如下:
# -*- mode: python -*-
block_cipher = None
a = Analysis(['FP.py'],
pathex=['D:\\XiutuDog'],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
a.datas +=(('_icon.ico','D:\\XiutuDog\\_icon.ico','DATA'),
('_pic.png','D:\\XiutuDog\\_pic.png','DATA'),
('_start.png','D:\\XiutuDog\\_start.png','DATA'))
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[('_icon.ico','D:\\XiutuDog\\_icon.ico','DATA')],
name='FP',
debug=False,
strip=False,
upx=True,
runtime_tmpdir=None,
console=False , icon='_icon.ico')
開始打包
與通常不同,這次的物件是之前改過的.spec檔案,而不是.py檔案
pyinstaller -F FP.spec
有個坑:如果剛改完.spec,手賤打了個 pyinstaller -F test.py ,那麼.spec檔案可就被改成預設的了!
完成後應當是這樣的(FP.exe是從dist資料夾複製出來的,【dist資料夾內就是打包好的exe】)
那個exe,離開了圖示所在的資料夾可能會變回原來的預設圖示,一會兒後會恢復……
但是無論如何,可以脫離圖片運行了o(* ̄▽ ̄*)ブ
部分其他參考
=====================2018.10.13更新===============
這個方法是把圖片存到絕對路徑了(存同文件夾是相對路徑……),所以放哪都能用……現在沒卵用,我再去找方法吧……