pyinstaller打包原理,常見問題。

2021-09-23 23:33:43 字數 2123 閱讀 4151

如果將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...