Nuitka打包.exe可执行文件

一、nuitka是什么

nuitka是一个用来将python代码打包为exe可执行文件,方便其在没有相关环境的windows系统上运行的工具(貌似也支持打包成linux系统下的可执行程序,没需求暂未尝试)。其原理为:将部分python代码(自己写的部分)转换成C代码,以提高运行的速度;import的第三方包不进行编译,在运行时,通过一个python3x.dll的动态链接库执行第三方包的python代码,通过这样的方式减少exe包的大小。

1.下载C编译器

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时会用上

2.下载Nuitka

(1)pip install nuitka 或者 conda install nuitka
python环境下载工具应该是很基本的内容,速度慢可以添加镜像源,这一部分不再赘述

3.使用nuitka简单打包python代码

(1)新建一个简单的python文件,测试运行没有出错
(2)使用nuitka xxx.py命令进行打包。在打包过程中会有提示下载一个包到***\nuitka\***这样一个文件夹中,下载进度条可能不动或者很慢,就可以使用 ctrl + C终止进程,手动将百度云下载的文件1解压到提示的这个文件家中
(3)重新使用nuitka xxx.py命令进行打包。还会提示下载另一个包,同样的方式将文件2解压放入
(4)重新使用nuitka xxx.py命令进行打包,这次应该就没问题了

二、Python虚拟环境搭建

1.1、下载Python

 1.2、使用 venv方法(创建虚拟环境)

# python -m venv +虚拟环境名称
python -m venv myenv 

# 其他
source myenv/bin/activate  # 在 Linux 或 macOS 上
myenv\Scripts\activate.bat  # 在 Windows 上

然后就在当前地方创建一个myenv文件夹

1.3、进入虚拟环境

然后进入目录“E:\aaaa\myenv\Scripts”

这里提供了两个方法:

调用activate文件——可以进入我们的虚拟环境

调用deactivate文件——可以退出我们的虚拟环境

成功进入

1.4、用pip下载项目需要的包(与nuitka)

# 换源
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 )

使用 Nuitka 打包:(重要的事情,说三遍!!!)

项目一定都要是英文路径!!!

项目一定都要是英文路径!!!

项目一定都要是英文路径!!!

  •  Nuitka2.0已经升级,如果我们缺少他需要的环境,他会自己去github上面下载(我们只需要耐心等待即可)
  • 如果觉得下载慢,就自己下载对应的环境吧!
  • 老版教程链接(Nuitka环境安装):https://blog.51cto.com/u_14121041/6414698

 2.1、打包常用命令(使用nuitka --help可查看所有命令)

--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结尾的叫模块

 2.2、我的项目打包示例

我的项目用了: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

进入虚拟环境->安装库->开始打包

2.3、注意事项

我们需要按y,同意下载(一路输入:yes,即可打包完成)

他会下载我们缺少的环境(这里我们选择了mingw64 ,他就会去github上面下载)

会有多个东西需要下载,所以耐心一些

2.4、打包成功

生成了一个55MB的可执行文件(因为我让他只能生成一个文件)

四、程序出现一闪而过

我们打包的程序容易出现一闪而过(nuitka闪退的情况),通常我们可以采取在cmd窗口用命令启动的方式查看代码出错的原因

五、pyinstaller打包aliyunsdkcore为exe报错

打包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 开源社区

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值