如果將python**使用pyinstaller打包成exe檔案時,只有乙個大的exe檔案,很多人可能遇到,在本機上就已經不能執行了,有的情況好些,在本機可以執行,發給別人就無法正常執行。本文本就是分析一下原因。
如果你源**中都使用絕對路徑讀的檔案,那麼你可能在本機上執行就是正常,但是如果分給別人,資源路徑不對應就會出錯了。
還有當你引用其它庫的時候,庫裡面再讀取檔案一般是相對路徑,例如
如果乙個乙個去改源**,就比較麻煩,最容易的方法就是把用到的庫都放到你的要生成的.py檔案同一目錄下,並在.spec檔案中加入他們,這樣讀取就沒有問題了。見紅字的。
# -*- mode: python -*-
import sys
import os.path as osp
sys.setrecursionlimit(25000000)
block_cipher = none
setup_dir = 'd:\\working\\python\\readheadfiletraining\\npl\\npl_sanguoandhamlet\\wordcloud'
a = analysis(['wordcloudinte***ce.py'],
pathex=[setup_dir],
binaries=,
datas=[('data','data'),('wordcloud','wordcloud'),('jieba','jieba'),('cv2','cv2')],
hiddenimports=,
hookspath=,
runtime_hooks=,
excludes=,
win_no_prefer_redirects=false,
win_private_assemblies=false,
cipher=block_cipher,
noarchive=false)
pyz = pyz(a.pure, a.zipped_data,
cipher=block_cipher)
exe = exe(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
,name='wordcloudinte***ce',
debug=false,
bootloader_ignore_signals=false,
strip=false,
upx=true,
runtime_tmpdir=none,
console=true,icon='demo.ico' )
另外,如果程式中讀了檔案,pyinstall也不會自動打包的。
比如我的程式讀取了 data資料夾下的msyh.tff字型檔案,如果我已經將data打進包了,這時要這樣改進**
#生成資源檔案目錄訪問路徑def resource_path(relative_path):
if getattr(sys, 'frozen', false): #是否bundle resource
base_path = sys._meipass
else:
base_path = os.path.abspath(".")
return os.path.join(base_path, relative_path)
myfontpath= resource_path("data/msyh.ttc")根據不同情況進行判斷,保證本機在除錯、及打包正常執行。
如果只用以下的宣告
myfontpath= "data/msyh.ttc"
那麼在生成後的exe檔案就肯定不好用了。除非你在.exe資料夾裡也乙個data資料夾,裡面也有乙個msyh.ttc
如果只用以下的宣告
myfontpath= "c:/test/data/msyh.ttc"
那麼在生成後的exe檔案就只能在本機好用了。除非你發給別人的系統也有一樣的路徑資料夾裡也乙個data資料夾,裡面也有乙個msyh.ttc才可以正常執行
所以原**中用到相對路徑要改,另外引用的庫可能也會用到相對路徑,也要修改,例如jieba,cv2,wordcloud等庫,具體問題要具體分析,基本都是這個原因引起的
pyinstaller打包程式
python打包成exe檔案時,用的是pyinstaller 第一步安裝pyinstaller pip install pyinstaller第二步 pyinstaller f w i ico py其中 ico 是logo,py是你要打包的py檔案 我在打包時出現了struct.error unpa...
pyinstaller打包使用
pyinstaller manage.py 如果直接打包報錯,使用如下命令可以直接生成配置檔案 pyi makespec d manage.py生成的配置檔案格式如下 mode python coding utf 8 block cipher none a analysis impala etl.p...
pyinstaller 打包總結
pyinstaller 打包過程總結 安裝 pyinstaller 打包工具 pip3 install pyinstallerpyinstaller 打包命令不熟悉的小夥伴可點選這裡檢視喲 備註 以下涉及到的檔案名字main.py,請替換成自己的檔名 執行打包命令生成單獨的 exe 程式 pyins...