前言: 近期使用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这个库,开发环境可以正常使用, 但是在打包完之后,打开确实报错的状态

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.

Python打包工具之pyinstaller的更多相关文章

  1. $python打包工具pyinstaller的用法

    pyinstaller是一个很好用的python打包工具,在Windows环境下可以将python脚本打包成一个exe可执行文件,并且脚本中所依赖的各种第三方库在打包时候都会被统一处理到一起,这样打包 ...

  2. Python打包EXE神器 pyinstaller

    最近由于项目需要,以前的python文件需要编辑为EXE供前端客户使用. 由于最早接触的是distutils,所以一开始准备使用distutils和py2exe搭配来进行python的exe化,也就是 ...

  3. python打包exe之pyinstaller用法

    pyinstaller可以将python写好的脚本打包成exe文件,方便windows用户在没有python环境下运行.这个程序完全跨平台,包括Windows.Linux.Mac OS X等多个操作系 ...

  4. Python打包工具setuptools的使用

    将我们写的Python程序发布成包后,可以使其能够安装使用. 在项目上测试的时候,某些情况下,可以将Python打包,然后上传到测试服务器,安装测试. setuptools是常用的打包工具. 一个简单 ...

  5. python打包工具pyinstaller的使用

    安装PyInstaller pip install pyinstaller 安装完后,检查安装成功与否: pyinstaller --version 安装成功后,就可以使用下面的命令了: pyinst ...

  6. python打包工具 --- pyinstaller

    安装 安装python并添加到环境变量之后,在终端执行如下命令即可: pip install pyinstaller 截图如下: 若安装失败,可到: https://www.lfd.uci.edu/~ ...

  7. 基于pyinstaller的python打包工具

    以下是软件链接:https://mysecreat.lanzoub.com/iZPGf0swgtbc 软件功能:可以对py文件进行打包,功能基于pyinstaller模块,因此需要安装python环境 ...

  8. Python打包工具

    打包Python应用,使用工具: 1.Linux和Windows下,使用pyinstaller pyinstaller -F -w XXX.py 在当前文件夹下生成两个文件夹:build .dist ...

  9. python打包工具distutils、setuptools分析

    在上一篇博文中总结了python中导入包,安装包一条完整的线路.其中有一个有意思的知识点,安装包的方式有很多种,模块和包管理中打包,发布,安装也是值得研究的内容. python中安装包的方式有很多种: ...

  10. python打包工具distutils、setuptools的使用

    python中安装包的方式有很多种: 源码包:python setup.py install 在线安装:pip install 包名(linux) / easy_install 包名(window) ...

随机推荐

  1. PlugIR:开源还不用微调,首尔大学提出即插即用的多轮对话图文检索 | ACL 2024

    即插即用的PlugIR通过LLM提问者和用户之间的对话逐步改进文本查询以进行图像检索,然后利用LLM将对话转换为检索模型更易理解的格式(一句话).首先,通过重新构造对话形式上下文消除了在现有视觉对话数 ...

  2. vuejs怎样封装一个插件(以封装vue-toast为例扩展)

    插件介绍 插件通常会为 Vue 添加全局功能.插件的范围没有限制--一般有下面几种: 1.添加全局方法或者属性,如: vue-custom-element 2.添加全局资源:指令/过滤器/过渡等,如  ...

  3. Go runtime 调度器精讲(九):系统调用引起的抢占

    原创文章,欢迎转载,转载请注明出处,谢谢. 0. 前言 第八讲介绍了当 goroutine 运行时间过长会被抢占的情况.这一讲继续看 goroutine 执行系统调用时间过长的抢占. 1. 系统调用时 ...

  4. HttpURLConnection和HttpClient使用

    HttpURLConnection 这是Java的标准类,继承自URLConnection,可用于向指定网站发送GET/POST请求. 方法描述 void setRequestMethod(Strin ...

  5. 2024 IDEA开发者部署lilishop的manager模块(详尽版)

    一.环境整合 构建工具(参考工具部署方式) 软件名称 版本 相关文章推荐 Git 13.5.0 https://www.cnblogs.com/liuyangfirst/p/15996063.html ...

  6. 基于RHEL 9 搭建 KVM 虚拟化环境

    一.准备工作 1. 检查硬件虚拟化支持 KVM 要求处理器支持硬件虚拟化技术:Intel VT-x(虚拟化技术扩展)或 AMD-V(虚拟化技术扩展). 检查方法: 使用以下命令检查 CPU 是否支持虚 ...

  7. Maya 2019.2 Mtoa 无法正常加载并报错

    事件起因: 在开始安装 Maya2019.2 时自动安装的 Mtoa 的版本为 5.3.1,但是在插件管理器里无法启用插件,于是乎去网上下了一个低的版本 5.1.1,虽然可以使用但是渲染出来的东西不能 ...

  8. 《Vue.js 设计与实现》读书笔记 - 第14章、内建组件和模块

    第14章.内建组件和模块 14.1 KeepAlive 组件的实现原理 KeepAlive 一词借鉴了 HTTP 协议. KeepAlive 组件可以避免组件被频繁的销毁/重建.本质是缓存管理,再加上 ...

  9. Nuxt.js 应用中的 page:start 钩子详解

    title: Nuxt.js 应用中的 page:start 钩子详解 date: 2024/10/8 updated: 2024/10/8 author: cmdragon excerpt: pag ...

  10. Putty 远程 连接kali Linux拒绝访问 refused connection

    1. 设置  ssh 文件 crtl + alt + t 代开终端 输入命令: vim /etc/ssh/sshd_config 说明 : 使用 vim 编辑器编辑 ssh 文件 : 说明: 修改第3 ...