栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

pyinstaller打包指南,No module named xxx,is only available if OpenCV is installed.虚拟环境打包

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

pyinstaller打包指南,No module named xxx,is only available if OpenCV is installed.虚拟环境打包

前言

        不知道大家用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:PYtest_venvscripts目录下执行:

activate

 测试:

发现路径前面跟了虚拟环境的名字证明环境被激活。

使用pip list可以看到当前环境下安装的包。
使用虚拟环境的好处是不同的项目可以有不同的环境,也方便管理,和迁移。 

在虚拟环境下打包:

为了避免打包过大,建议使用虚拟环境打包。需要注意的是,要在虚拟环境下安装pyinstaller,使用虚拟环境的pyinstaller。

好了,你现在已经学会怎样搭建虚拟环境了,那么现在在实际项目中试一下吧:

Ohhhhhh ...  血压上来了有木有,但是经过一番查阅后总结了以下方法:

管理员运行PowerShell 执行set-ExecutionPolicy RemoteSigned再输入y回车:(解决vscode运行python时,提示无法加载文件xxx.venvscriptsactivate.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 ,其它的自己研究咯。

祝你好运~~

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/665875.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号