Pyinstaller打包exe附帶圖片的方法

畢設寫的工具最近纔想起來應該做成個exe造福大衆,奈何路途曲折

先是vs直接裝的pyinstaller不管用;後是不知如何打多個文件的項目(最後寫在一個.py裏了……還有import的包儘量減少了);最後是圖片文件不會打包在一起,讓我有種擦屎擦不乾淨的不爽的感覺——一個小exe還必須和幾個固定命名的圖片在一個文件夾內不然打不開!!

 

今天看了看了不少帖子,方法有的簡單但是不成功;有的麻煩,要改的東西有點多就不想嘗試;最後看着錯誤提示加思考終於成功的打了個exe!

 

pyinstaller的安裝:

參照https://blog.csdn.net/lqzdreamer/article/details/77917493

單個exe啥也不用的話,下面的命令就夠了。

pyinstaller -F test.py

 

接下來介紹打包圖片的方法。

開始是參考https://blog.csdn.net/qq744746842/article/details/49404027的,但是後來嘗試失敗,

pyinstaller options name.spec

這句代碼執行不了啊……

 

本教程完整過程開始:

生成spec文件:

這是我要打包的東西。(接下來的文件名都參照這個)

然後cmd到這個目錄,(我是當前文件夾直接按住shift+右鍵,單擊“在此處打開powershell窗口”,效果一樣還方便)

在cmd裏輸入 :

 pyi-makespec FP.py

會生成一個FP.spec

然後改FP.spec裏面的東西,下面是原樣

直接打這個文件的包出來的是……如下,我可不想把工具做的這麼複雜……

接下來就是改裏面的東西,(如果不想用這種辦法,另一種是https://blog.csdn.net/jirryzhang/article/details/78881512裏的是用指令來做,而且直接是單個exe)

 

.py圖片引用完整路徑

改之前,需要把你python程序裏的所有的圖片引用換成完整的路徑:

代碼裏就這麼用圖片嘍……

此方法有參照http://tieba.baidu.com/p/3060401749的第6樓(看他jia加的函數,就是獲取完整路徑而已),再加再一篇帖子裏看到“pyinstaller不是將代碼編譯,而是將腳本弄成可以執行的文件,所以別想能打包後程序變快”,由此猜想到“圖片需要完整路徑,spec文件裏也要寫上完整路徑,這樣就能讓這個exe‘接軌’運行起來”

 

開始改spec文件:

方法有參考 https://blog.csdn.net/xinyingzai/article/details/80282856

 

但是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(* ̄▽ ̄*)ブ

 

部分其他參考

https://blog.csdn.net/xueyuanlzh/article/details/79892968

https://blog.csdn.net/lion_cui/article/details/51329497(圖片轉py,覺得麻煩,沒用它)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章