Python打包工具之pyinstaller
前言: 近期使用PySimpleGUI开发了一款开发者工具X-助手工具,意打造成平常开发助手,无论是图片还是网址的处理等等都需要这一个工具即可,无需在网上找各个网站去找解决方案, 对于GUI的打包工具,在Python领域pyinstaller较为流行
工具样例:
安装:
pip install -U pyinstaller
使用:
1.第一次打包
pyinstaller -F -w -i icon.ico main.py -n X-助手工具 #-F 选项,创建一个打包的执行文件; # -w 选项,执行文件运行过程中,不出现命令行窗口; # -n X-助手工具,指定输出的可执行文件名为 "X-助手工具"。 # -i icon.ico,指定图标文件,打包时将使用此图标; # 更多选项,参见 https://pyinstaller.org/en/stable/usage.html#options
打包完成之后, 在当前目录下会生成一个.spec配置文件, 打包好的exe文件在dist目录之下
2.使用配置文件进行后续打包
pyinstaller X-tools.spec
# 直接指定该配置文件即可
3.配置项
# -*- mode: python ; coding: utf-8 -*-
dll_path = 'E:\\python-project\\x-helper\\env\\Lib\\site-packages\\pyzbar\\'
add_files = [ ('fonts\\font.ttf', 'fonts'), ('images\\*.png', 'images'), ('images\\flappy.ico', 'images'), ('audios\\*.wav', 'audios'), ]
a = Analysis(
['main.py'], # 项目的入口文件
pathex=[], # 当前项目的所在绝对路径
binaries=[(dll_path+'libiconv.dll', '.'), (dll_path+'libzbar-64.dll', '.'),], # 二进制文件
datas=add_files, # 存放所有资源文件,每个文件是一个2元组元素
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
noarchive=False,
optimize=0,
)
pyz = PYZ(a.pure)
exe = EXE(
pyz,
a.scripts,
a.binaries,
a.datas,
[],
name='X-助手工具', # 最终软件的名称
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=False, # 若是true的话, 同时会打开一个cmd窗口,不影响原有程序运行
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
icon=['icon.ico'], # 设置程序图标,绝对路径 ico格式文件(16*16)
)
常见问题:
1.在识别二维码过程中用到了pyzbar这个库,开发环境可以正常使用, 但是在打包完之后,打开确实报错的状态
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | Traceback (most recent call last): File "pyzbar\zbar_library.py" , line 58, in load File "pyzbar\zbar_library.py" , line 50, in load_objects File "pyzbar\zbar_library.py" , line 51, in <listcomp> File "ctypes\__init__.py" , line 447, in LoadLibrary File "PyInstaller\loader\pyimod04_ctypes.py" , line 56, in __init__ pyimod04_ctypes.PyInstallerImportError: Failed to load dynlib/dll 'libiconv.dll' . Most probably this dynlib/dll was not found when the application was frozen. During handling of the above exception, another exception occurred: Traceback (most recent call last): File "PyInstaller\loader\pyimod04_ctypes.py" , line 54, in __init__ File "ctypes\__init__.py" , line 369, in __init__ FileNotFoundError: Could not find module 'D:\代码\weebot\main\pyzbar\libiconv.dll' . Try using the full path with constructor syntax. The above exception was the direct cause of the following exception: |
解决:
第一种方法:在自己的虚拟环境中找到该模块的dll(libiconv.dll+libzbar-64.dll),手动复制粘贴到打包后目录(dist)即可:但是这种拷贝到另外一个地方使用的时候,这些dll文件也要一并拷贝过去,不够方便,或者将其加入全局变量使用
第二种方法:修改spec文件的时候设置好导入位置,打包时会自动识别
# -*- mode: python ; coding: utf-8 -*- dll_path = 'E:\\python-project\\x-helper\\env\\Lib\\site-packages\\pyzbar\\' a = Analysis( ['main.py'], pathex=[], binaries=[(dll_path+'libiconv.dll', '.'), (dll_path+'libzbar-64.dll', '.'),], datas=[], hiddenimports=[], hookspath=[], hooksconfig={}, runtime_hooks=[], excludes=[], noarchive=False, optimize=0, ) pyz = PYZ(a.pure) exe = EXE( pyz, a.scripts, a.binaries, a.datas, [], name='X-助手工具', debug=False, bootloader_ignore_signals=False, strip=False, upx=True, upx_exclude=[], runtime_tmpdir=None, console=False, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, icon=['icon.ico'], )
2. FileNotFoundError: Could not find module '你的路径\Python\Python38\site-packages\pyzbar\libzbar-64.dll' (or one of its dependencies). Try using the full path with constructor syntax
解决: 需要安装visual C++的库
-
下载地址:Visual C++ Redistributable Packages for Visual Studio 2013
-
进入之后,拉到下面可以看到下载的按钮,下载完之后安装即可!:
3.
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
2021-09-29 nginx之日志