赞
踩
nuitka是一个用来将python代码打包为exe可执行文件,方便其在没有相关环境的windows系统上运行的工具(貌似也支持打包成linux系统下的可执行程序,没需求暂未尝试)。其原理为:将部分python代码(自己写的部分)转换成C代码,以提高运行的速度;import的第三方包不进行编译,在运行时,通过一个python3x.dll的动态链接库执行第三方包的python代码,通过这样的方式减少exe包的大小。
nuitka的原理就是将部分代码转换为C,然后进行编译,所以需要先下载C编译器。
(1)下载MinGW64 8.1,目前为止还是这个版本最稳定。下载地址:https://sourceforge.net/projects/mingw-w64/files
百度网盘下载 密码:8888
(2)将文件3
MinGW64 8.1 解压到C盘,并添加环境变量
(3)打开cmd命令,使用gcc.exe --version测试是否添加上。一个坑:之前如果安装过c编译器可能添加过gcc环境变量导致MinGW64 8.1的环境变量被覆盖,早期的gcc版本在编译代码中可能会出现bug。
(4)其他两个文件在安装Nuitka时会用上
(1)pip install nuitka 或者 conda install nuitkapython环境下载工具应该是很基本的内容,速度慢可以添加镜像源,这一部分不再赘述
(1)新建一个简单的python文件,测试运行没有出错
(2)使用nuitka xxx.py
命令进行打包。在打包过程中会有提示下载一个包到***\nuitka\***
这样一个文件夹中,下载进度条可能不动或者很慢,就可以使用 ctrl + C
终止进程,手动将百度云下载的文件1
解压到提示的这个文件家中
(3)重新使用nuitka xxx.py
命令进行打包。还会提示下载另一个包,同样的方式将文件2
解压放入
(4)重新使用nuitka xxx.py
命令进行打包,这次应该就没问题了
venv方法(创建虚拟环境)
- # python -m venv +虚拟环境名称
- python -m venv myenv
-
- # 其他
- source myenv/bin/activate # 在 Linux 或 macOS 上
- myenv\Scripts\activate.bat # 在 Windows 上
然后就在当前地方创建一个myenv文件夹
然后进入目录“E:\aaaa\myenv\Scripts”
这里提供了两个方法:
调用activate文件——可以进入我们的虚拟环境
调用deactivate文件——可以退出我们的虚拟环境
- # 换源
- pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
- pip config set install.trusted-host mirrors.aliyun.com
- pip install nuitka
- pip install -r requirements.txt # 假设你的所有依赖都列在了 requirements.txt 文件中
使用 Nuitka 要在虚拟环境中使用!!!(而且你的虚拟环境也要安装Nuitka )
使用 Nuitka 打包:(重要的事情,说三遍!!!)
项目一定都要是英文路径!!!
项目一定都要是英文路径!!!
项目一定都要是英文路径!!!
- Nuitka2.0已经升级,如果我们缺少他需要的环境,他会自己去github上面下载(我们只需要耐心等待即可)
- 如果觉得下载慢,就自己下载对应的环境吧!
- 老版教程链接(Nuitka环境安装):https://blog.51cto.com/u_14121041/6414698
--mingw64 #默认为已经安装的vs2017去编译,否则就按指定的比如mingw(官方建议)
--standalone 独立环境,这是必须的(否则拷给别人无法使用)
--windows-disable-console 没有CMD控制窗口
--output-dir=out 生成exe到out文件夹下面去
--show-progress 显示编译的进度,很直观
--show-memory 显示内存的占用
--enable-plugin=pyside6
--plugin-enable=tk-inter 打包tkinter模块的刚需
--plugin-enable=numpy 打包numpy,pandas,matplotlib模块的刚需
--plugin-enable=torch 打包pytorch的刚需
--plugin-enable=tensorflow 打包tensorflow的刚需
--windows-icon-from-ico=你的.ico 软件的图标
--windows-company-name=Windows下软件公司信息
--windows-product-name=Windows下软件名称
--windows-file-version=Windows下软件的信息
--windows-product-version=Windows下软件的产品信息
--windows-file-description=Windows下软件的作用描述
--windows-uac-admin=Windows下用户可以使用管理员权限来安装
--linux-onefile-icon=Linux下的图标位置
--onefile 像pyinstaller一样打包成单个exe文件(2021年我会再出教程来解释)
--include-package=复制比如numpy,PyQt5 这些带文件夹的叫包或者轮子
--include-module=复制比如when.py 这些以.py结尾的叫模块
我的项目用了:PySide6、opencv-python、numpy三个库
我的打包命令:(你的可以自行调整)
nuitka --mingw64 --show-progress --standalone --disable-console --enable-plugin=pyside6 --plugin-enable=numpy --onefile --remove-output camera.py
nuitka --mingw64 --standalone --show-progress --show-memory --output-dir=out2 api2.py
nuitka --mingw64 --standalone --show-progress --show-memory --plugin-enable=numpy --plugin-enable=torch --output-dir=out2 api2.py
进入虚拟环境->安装库->开始打包
我们需要按y,同意下载(一路输入:yes,即可打包完成)
他会下载我们缺少的环境(这里我们选择了mingw64 ,他就会去github上面下载)
会有多个东西需要下载,所以耐心一些
生成了一个55MB的可执行文件(因为我让他只能生成一个文件)
我们打包的程序容易出现一闪而过(nuitka闪退的情况),通常我们可以采取在cmd窗口用命令启动的方式查看代码出错的原因
打包exe后运行报错,找不到retry_config.json文件,这个文件在我python的安装目录下alyunsdkcore/data下是存在的
而报错提到的目录是一个临时目录,只在运行exe时建立,并且在黑框闪退后直接删除
接下来就开始了各种找坑之路,安装、升级模块、sdk,卸载重装,修改spec文件等等,特别是因为我代码中用到了matplotlib画图,多位网友提到pyinstaller打包matplotlib这个毒瘤遇到的问题,如打包过程中查询模块的递归深度超过系统代码默认设置,但即便我剔除了那部分代码,报错依然存在,于是回到aliyunsdkcore这个方向,从这个方向查问题,直到 https://yq.aliyun.com/ask/479151
总之,找问题的过程一大堆,解决问题的方法其实很简单
重装阿里sdk
1.卸载aliyun-python-sdk-core
pip uninstall aliyun-python-sdk-core
pip uninstall aliyun-python-sdk-core-v3
2.在github上克隆代码
https://github.com/aliyun/aliyun-openapi-python-sdk/tree/master/aliyun-python-sdk-core
3.进入aliyun-python-sdk-core 目录下,然后使用 python setup3.py install 来安装 aliyun-python-sdk-core 的python3版本
4.之后打包exe,执行成功
猜测原因:
在阿里云帮助文档中给出的安装命令是 pip install aliyun-python-sdk-core,使用python3和3版本的pip执行该命令,安装后确实可以正常调用sdk使用,且同时安装了aliyun-python-sdk-core-v3,但github源码中给了2个脚本setup.py、setup3.py ,且脚本中安装包的name不一致,py3是aliyun-python-sdk-core-v3 ,猜测应该是因为使用了pip 执行的安装导致python 版本问题,但之后我又尝试执行pip install aliyun-python-sdk-core-v3来安装,问题还是出现,因此建议照上面的方法从github直接下载安装。
六、外部资源文件
将外部资源文件直接复制到app.dist中
参考链接:Python——Windows使用Nuitka2.0打包(保姆级教程)_python_Pan_peter-GitCode 开源社区
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。