Pyinstaller 打包python,引入import wx_adv失败,工程报错的问题

解决Pyinstaller打包wxPython报错
本文介绍在使用Pyinstaller将wxPython GUI程序打包成exe时遇到的Nomodulenamedwx_adv错误,并提供了解决方案,通过在主文件中导入wx._adv和wx._html模块即可避免该问题。

我使用的环境

python:3.7.4

wxpython版本是:4.0.6

Pyinstaller版本:3.5

最近在练习使用wxpython写GUI程序,然后使用Pyinstaller 打包成一个exe文件 使用-F命令;

然后悲剧出现了,运行exe文件 控制台(开启控制台命令,不要加-w参数 Pyinstaller -F XXXX.py)报错:No module named "wx_adv" 启动失败

万能的网上搜索:提出解决方案

在你要打包的***.py主文件内使用:

import wx._adv, wx._html

命令

重新打包,OK!

参考链接:https://blog.youkuaiyun.com/gesongxiang/article/details/88048607

### 使用 PyInstaller 打包包含 `__file__` 的 Python 脚本 当使用 PyInstallerPython 应用程序打包为独立的可执行文件时,处理涉及路径操作特别是 `__file__` 变量的情况需要特别注意。因为一旦被打包成单个可执行文件,在运行环境中不再存在源码结构,这可能导致基于相对路径的操作失败。 为了确保打包后的应用能够正确解析文件路径,可以采用如下方法: #### 修改脚本中的路径获取方式 对于原本依赖于 `__file__` 来定位资源文件的应用,建议改为通过 `sys._MEIPASS` 获取临时解压目录下的资源位置。具体实现可以通过检测当前环境是否由 PyInstaller 加载来决定路径读取逻辑: ```python import os import sys def resource_path(relative_path): """ Get absolute path to resource, works for dev and for PyInstaller """ try: # PyInstaller creates a temp folder and stores path in _MEIPASS base_path = sys._MEIPASS except Exception: base_path = os.path.abspath(".") return os.path.join(base_path, relative_path) # Example usage of the function within your code data_file = resource_path('my_data.txt') with open(data_file, 'r') as f: content = f.read() ``` 此函数会判断当前是在开发模式还是已打包状态,并返回相应的绝对路径[^2]。 #### 安装 PyInstaller 并创建可执行文件 安装 PyInstaller 后,可通过命令行参数指定要打包的目标文件以及其他选项完成构建过程。常用的方式包括但不限于以下几种配置: - `-F`: 创建单一文件输出,默认情况下 PyInstaller 会产生一个名为 dist 的目录存放所有必要的组件;而使用该标志则只生成一个单独的 .exe 文件。 - `-w`: 如果不希望显示控制台窗口,则加上这个开关。 - `--add-data <SRC;DEST>`: 添加额外的数据文件到最终产物中去,这对于那些需要访问外部资源(比如图片、配置文件等)的应用非常重要[^3]. 例如,假设有一个名为 `main.py` 的入口模块以及一些辅助性的静态资产存放在同一级目录下,那么完整的打包指令可能是这样的: ```bash pyinstaller -F --add-data "resources/my_data.txt;." main.py ``` 这里假定 `resources/` 是相对于项目根部的一个子文件夹名称,其中包含了所需的文本数据文件 `my_data.txt`. 上述做法不仅解决了 `__file__` 导致的问题,还保证了即使在不同操作系统平台上也能稳定工作[^4].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值