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++的库

 

3.

 

posted @   X-Wolf  阅读(67)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
历史上的今天:
2021-09-29 nginx之日志
 
点击右上角即可分享
微信分享提示
杭州
18:04发布
杭州
18:04发布
4°
西南风
2级
空气质量
相对湿度
87%
今天
多云 / 小雨
4°/13°
周三
多云 / 晴
8°/19°
周四
多云
11°/24°