python经典学习
设置pip的国内镜像下载源
python经典项目必学或必会用【持续更新。。。】
python使用虚拟环境virtualenv
如何正确移除selenium中的window.navigator.webdriver
PyAutoGUI-python版按键精灵
QT中使用QSS进行界面美化及很好的QSS样式表
【AI】使用Stable Diffusion的WebUi版本
Mojo新语言的学习
使用Nuitka打包exe程序
python常见错误
超强的python库--vaex
python库-zmail的使用
python库-APScheduler定时任务
rich库--终端显示美化神器
关于套用lut的库使用-pycubelut和lutlib
本文档使用 MrDoc 发布
-
+
up
down
首页
使用Nuitka打包exe程序
## python脚本打包成EXE ### 工具介绍 有2个工具可以打包python脚本,转成exe可执行程序; 使用后的最大的感受就是: > pyinstaller体验很差! 1、一个深度学习的项目最后转成的exe竟然有近3个G的大小(pyinstaller是将整个运行环境进行打包),对,你没听错,一个EXE有3个G! 2、打包超级慢,启动超级慢。 > nuitka真香! 1、同一个项目,生成的exe只有7M! 2、打包超级快(1min以内),启动超级快。 ### 隐藏代码 - pyinstaller通过设置key来对源码进行加密的; - nuitka是将python源码转成C++(这里得到的是二进制的pyd文件,防止了反编译),然后再编译成可执行文件。 ### 便于移植 用户使用方便,不用再安装什么python啊,第三方包之类的。 ## nuitka安装 [Nuitka Github](https://github.com/Nuitka/Nuitka) [Nuitka官网](https://nuitka.net/index.html) ### Windows安装 ``` pip install nuitka ``` 需要提前安装好vs2019(MSVS)或者MinGW64,反正都是C++的编译器。版本:`11.3.0-14.0.3-10.0.0-msvcrt-r3`   【这儿的不可用】所以可以安装指定的gcc版本:[mingw-builds-binaries](https://github.com/niXman/mingw-builds-binaries/releases) 【根据提示下载安装(复制到迅雷)】  这个下载好慢,迅雷下载后复制到指定目录即可。  https://github.com/ccache/ccache/releases/download/v4.6/ccache-4.6-windows-32.zip  https://dependencywalker.com/depends22_x64.zip 下载后,解压到指定位置,然后设置好环境变量。 ### Linux安装 ``` pip install nuitka ``` 安装后可以使用nuitka或名称为 nuitka3 使用时,使用了参数--standalone会导致 报错: ``` Nuitka-Options:INFO: Used command line options: --standalone --show-memory --show-progress --nofollow-imports --output-dir=exe gc2absCoordinate.py FATAL: Error, standalone mode on Linux requires 'patchelf' to be installed. Use 'apt/dnf/yum install patchelf' first. ``` 需要按提示 sudo安装一下`patchelf`依赖。 ``` sudo apt-get install patchelf ``` ## 使用 ### 创建venv虚拟环境,并激活,安装依赖 ``` python -V python -m venv venv .\venv\Scripts\activate pip install nuikta ``` ### 运行自己的脚本,看是否正常运行,如果缺少依赖包,则pip进行安装 ``` python gc2absCoordinate.py -s "NM_001363711:c.647_656delinsTTTCCCCCGAGACTC" # 报错,提示缺少pyfaidx,则pip install pyfaidx # 之后,正确输出如下结果 [{"input": "NM_001363711:c.647_656delinsTTTCCCCCGAGACTC", "info": "", "positions": [{"region": "15:45403641-45403650", "chr": "15", "pos": 45403640, "refA": "CAGGGGGTTCT", "altA": "CGAGTCTCGGGGGAAA", "txs": ["NM_001363711.2"], "notxs": ["NM_014080.4"]}]}] ``` ### Windwos gcc版本确定 ``` gcc --version gcc (x86_64-posix-seh-rev1, Built by MinGW-Builds project) 13.1.0 Copyright (C) 2023 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ``` ### 进行打包、编译 ``` nuitka --standalone --show-memory --show-progress --nofollow-imports --output-dir=exe gc2absCoordinate.py # windows nuitka --standalone --show-memory --show-progress --nofollow-imports --output-dir=exe --enable-plugin=tk-inter --windows-disable-console --windows-icon-from-ico=./logo256.ico lottery.py ```  > nuitka的命令参数解释: - --mingw64:Enforce the use of MinGW64 on Windows. Defaults to off unless MSYS2 with MinGW Python is used. - --standalone:方便移植到其他机器,不用再安装python - --show-memory --show-progress:展示整个安装的进度过程 - --nofollow-imports:不编译代码中所有的import,比如keras,numpy之类的。 - --plugin-enable=qt-plugins:如果用到pyqt5来做界面的,需要下载nuitka对应的插件;--enable-plugin=pyqt5 --enable-plugin=tk-inter - --follow-import-to=utils,src:需要编译成C++代码的指定的多个包含源码的文件夹,用,来进行分隔。--output-dir=out:指定输出的结果路径为out。 - --windows-icon-from-ico=./logo.ico:指定生成的exe的图标为logo.ico这个图标; - --windows-disable-console:运行exe取消弹框。不放是方便查看调试结果,最后确保没问题可以放上该参数。   ### Linux下也建议创建一个虚拟环境,避免好多没用上的包编译  ### 完成 可以看到最终有两个目录,一个build和一个dist,直接将dist拷贝出来。里面有这么多文件(config.ini是本程序的配置文件)  ### 常见问题 1、如运行报错:`no module named torch,cv2,tensorflow`, **原因:**这是缺少这些没有转成C++的第三方包,原因是我们打包的时候,设置了`--nofollow-imports`,所以不会对导入的这些包进行编译(自己写的会编译)。 **解决方法:**找到这些包(我的是在software\python3.7\Lib\site-packages下)复制(比如numpy,cv2这个文件夹)到dist路径下。 2、家里的ROG电脑就一直报错,虽然pip成功安装了nuitka,但:  可以看到python版本和windows系统等信息,但是报了错误 ``` AttributeError: 'str' object has no attribute 'decode': File "C:\PYTHON~1\lib\SITE-P~1\nuitka\build\CCOMPI~1.SCO", line 181: env = createEnvironment( File "C:\Python310\lib\site-packages\nuitka\build\SconsUtils.py", line 220: env = Environment( File "C:\PYTHON~1\lib\SITE-P~1\nuitka\build\INLINE~1\lib\scons-4.3.0\SCons\Environment.py", line 1010: ``` 正常应该为:   系统是windows11,而前面却显示windows10,会不会是nuitka不支持windows 11???
laihui126
2025年5月15日 11:44
分享文档
收藏文档
上一篇
下一篇
微信扫一扫
复制链接
手机扫一扫进行分享
复制链接
关于 MrDoc
觅道文档MrDoc
是
州的先生
开发并开源的在线文档系统,其适合作为个人和小型团队的云笔记、文档和知识库管理工具。
如果觅道文档给你或你的团队带来了帮助,欢迎对作者进行一些打赏捐助,这将有力支持作者持续投入精力更新和维护觅道文档,感谢你的捐助!
>>>捐助鸣谢列表
微信
支付宝
QQ
PayPal
下载Markdown文件
分享
链接
类型
密码
更新密码