1. 程式人生 > >Pyinstaller打包exe附帶圖片的方法

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更新===============

這個方法是把圖片存到絕對路徑了(存同文件夾是相對路徑……),所以放哪都能用……現在沒卵用,我再去找方法吧……