前言
不知道大家用pyinstaller打包时候是否经常出现各种找不到依耐的抱错,在调试时候正常,一打包就嗝屁了。今天就针对pyinstaller踩坑过程来简短总结一下。
首先我这里使用的是python3.9 + pycharm环境进行开发的,当然其它的也可以,我更建议也使用pycharm。
在进行打包之前需要先了解虚拟环境和全局环境,可能你在调试的时候是使用的虚拟环境,但是打包的时候又使用了全局环境,这样一来两个环境的库不是相互包含的也是出现找不到模块的原因之一。
搭建虚拟环境:
在pycharm工程创建之初选择虚拟模式:
或者在已有工程的File-Settings-Project:xxx -Python Interpreter下进行配置:

再或者,你如果是其他平台,可以使用命令完成:
先安装虚拟环境管理器(暂且这样称呼):
pip install virtualenv

(此命令的运行路径是任意的)。
随后到需要创建虚拟环境的位置执行virtualenv xxx (xxx为要创建的虚拟环境名字)进行虚拟环境的创建:
virtualenv test_venv
比如我在E:\PY创建名为test_venv的虚拟环境:
此时可以看到文件夹被创建:
随后cd切换到E:\PY\test_venv\Scripts目录下执行:
activate
![]()
测试:

发现路径前面跟了虚拟环境的名字证明环境被激活。
使用pip list可以看到当前环境下安装的包。
使用虚拟环境的好处是不同的项目可以有不同的环境,也方便管理,和迁移。
在虚拟环境下打包:
为了避免打包过大,建议使用虚拟环境打包。需要注意的是,要在虚拟环境下安装pyinstaller,使用虚拟环境的pyinstaller。
好了,你现在已经学会怎样搭建虚拟环境了,那么现在在实际项目中试一下吧:

Ohhhhhh ... 血压上来了有木有,但是经过一番查阅后总结了以下方法:
管理员运行PowerShell 执行set-ExecutionPolicy RemoteSigned再输入y回车:(解决vscode运行python时,提示无法加载文件xxx\.venv\Scripts\activate.ps1,未对文件进行数字签名,因为在此系统上禁止运行脚本。_ListenableFuture的博客-CSDN博客)
再去项目虚拟环境下执行activate:

在路径前面出现虚拟环境名字表示成功激活环境并启用成功,如果在CMD中可以启动,但是在pycharm不行的话就以管理员身份启动pycharm一般也就可以了。
在这里面执行pip install xxx 安装的库(和在pycharm下使用虚拟环境创建的项目的File-Settings-Project:xxx -Python Interpreter下进行配置库是一样的,前提是同一个虚拟环境)都是在虚拟环境下的,不会污染:
接着就可以在虚拟环境执行pyinstaller命令了
本文重点
不建议直接使用 pyinstaller -F -w xxx.py 生成exe
如果你的依耐比较多,这样不容易发现问题,建议先用
pyinstaller -F xxx.py
其中-w代表隐藏窗口,-F表示打包成单个文件。 不隐藏窗口打包后运行可以在控制台看到错误提示(很快,建议手机用慢动作拍下报错过程),随后使用
pyi-makespec -F xxx.py 生成xxx.spec文件(pyinstaller -F xxx.py 也会有这个文件,只不过马上又开始下一步了),随后修改xxx.spec:
先在 hiddenimports 添加报错 No module named xxx对应的模块名字,保存后执行:
pyinstaller xxx.spec
如果这里报checking EXE的错,就删掉之前打包生成的文件夹。

添加后如果解决不了,比如我这里opencv出现is only available if OpenCV is installed等字样,就吧路径放到pathex段。 (或者import cv2 print(cv2.__file__) 这样来确认opencv路径,然后加到pathex段 )
zai
随后打包后就能正常运行了。
其实执行 pyinstaller -F xxx.py 后面跟的参数都会在xxx.spec体现,因此 pathex 段落对应的是"--path="这个参数,-w 对应的是xxx.spec 的 console = False ,其它的自己研究咯。
祝你好运~~
本文介绍了在Python开发中如何使用PyCharm创建和管理虚拟环境,以及如何解决使用PyInstaller打包时遇到的依赖问题。通过详细步骤展示了如何激活虚拟环境、安装PyInstaller、打包项目,并特别强调了在打包过程中处理缺失模块的方法,包括修改spec文件和添加隐藏导入。此外,还分享了在PowerShell中设置执行策略以解决权限问题。
1万+

被折叠的 条评论
为什么被折叠?



