记录nuitka打包遇见的坑以及打包步骤

        在使用nuitka打包的时候老是忘记以前怎么打包的,然后后面老是遇到一些坑不知道如何解决浪费大量时间去找问题,特此记录一下本次完整的一个打包过程以帮助未来的我和各位博友。

一、搭建python虚拟环境

        本人以前用的是anaconda建立虚拟环境,在这次的打包过程中遇到一些问题导致anaconda无法打开,简单来说G了,所以这次没有使用anaconda的虚拟环境,而是在python官方网站下载了一个python3.10.8-amd64.exe,本来想下载3.9的,但是我的系统原来的版本是3.9导致不能装了,因为安装之后它们貌似共享以前的python3.9安装的库。

        搭建python虚拟环境是因为Nuitka貌似会把整个python环境的库给打包(这次很奇怪,我遇到的一个坑是某个库没有被打包,后面详解),其次就是能做到环境隔离,不影响系统环境,这里如果因为一些库导致我们要删减或者增加库导致系统环境崩了那就得不偿失了,本人这次就是因为开了两个CMD然后没注意删除了主环境的库,虽然后面又安装回来了,但是anaconda还是无法打开,整个人自闭了!

1.1 安装python

        安装不多做叙述了,有手就行,如果不打算用系统环境的python安装,那么要记得把python的安装路径记下来,比如我就安装在 E:\...\Python\Python310 里面,中间就省略了

1.2 创建虚拟环境

        在Python310的目录里按住Shift键然后点击鼠标右键打开的命令窗口,使用系统python的直接就打开cmd就好了,然后输入:.\python -m venv myenv(系统python的.\省略)

1.3 激活虚拟环境

        在新的虚拟环境里找到Scripts文件夹,里面有一个activate文件,使用cmd运行它就可以进入虚拟环境了。如下图所示:

1.4 退出虚拟环境(需要的时候使用)deactivate

二、使用Nuitka打包py文件

2.1 安装Nuitka库以及代码中需要使用的库,这里不多做叙述,可以使用下面的清华源加速。

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple package

2.2 打包之前在cmd运行下面的指令检查是否有自己需要使用的插件,如果有则需要进行设置。

nuitka --plugin-list

        在以前第一次接触nuitka的时候我就是在这里绕了好久的圈,我需要设置的是pyside2

2.3 创建Nuitka的打包命令

打包常用命令如下:

--mingw64             使用mingw-w64-gcc编译器,不写这个好像是会默认一个别的,没有太理解
--standalone         独立环境,这是必须的(否则拷给别人无法使用)
--windows-console-mode=disable         没有CMD控制窗口
--output-dir=out         生成exe到out文件夹下面去
--show-progress        显示编译的进度,很直观
--show-memory         显示内存的占用
--enable-plugin=pyside2    指定需要使用的插件,我的是pyside2,没有可以不填
--onefile         打包成单个的exe文件
--include-package=PACKAGE  指定导入包,而不是nuitka自动导入
--include-module=MODULE      指定导入模块,而不是nuitka自动导入

        建议大家根据自己的需要创建命令,参考上面的常用命令,最终本人使用了两条命令,命令依次如下:

1、检查包是否有错误的命令

nuitka --mingw64 --show-progress --standalone --enable-plugin=pyside2 --include-package=ddddocr D:\...\NewEnvs\main.py

         这条命令会让它的cmd控制窗口一直存在,如果程序报错了会在窗口里显示出来,因为打包好之后我的程序一直没反应,看不到哪里错了,我就想看看,最后去掉了--windows-console-mode=disable,发现了好几个问题,后面再叙述。(注:测试的时候不要加--onefile,因为会增加打包的时间,在确定了没有问题再添加

2、最终打包程序代码

nuitka --mingw64 --show-progress --onefile --standalone --windows-console-mode=disable --enable-plugin=pyside2 --include-package=ddddocr D:\...\NewEnvs\main.py

        经过第一条命令的检查与调试之后,确定了代码和环境都没有问题了,我们就可以打包代码了,这个时候我加上了--onefile以及--windows-console-mode=disable,执行这条命令经过漫长的等待之后就能够看到成功打包好程序了。(注:如果是第一次使用nuitka打包,估计会下载一些东西,一路根据提示yes下去就好了,祝各位好运!)下面是我的代码成功截图。

 三、记录我遇到的坑

3.1 中文目录存在导致无法正常编译

        我是极度无语子的,虽然我知道,路径中不能有中文,但是我是万万没想到,在我的路径旁支有个微信小程序开发工具,我会因为这里报错了!!!这辈子都没这么无语过,这个报错的位置可以在当前打包的位置的一个名为nuitka-crash-report的文件里可以看到,暂时还不清楚什么原因,随后我将那个路径改成英文的,就可以正常打包了

3.2 没有识别到我代码里的某个导入的我编写的其它模块

        在2.3里我提到过我去掉了某些指令,让后台命令控制窗口能够显示,在控制窗口里我发现了两个坑,第二个坑会在3.3讲述。第一个坑就是我写的其它.py文件nuitka没有找到,就很烦,我的解决办法很粗暴,就是把其它的.py文件的代码放到了编译的py文件中,最后解决了这个问题,不过本人认为--include-module=MODULE也许能解决这个问题,但是没有去尝试了。

3.3 无法找到某个模板编译

        在2.3的命令里可以看到我有使用过--include-package=ddddocr这个选项。没错,我的nuitak找不到ddddocr。真真的心寒,不是大吵大闹!不过后面我也找到了一个很粗暴的方法,既然找不到,那我手动给你copy过来总行了吧。于是我找到了虚拟环境下的\Lib\site-packages\ddddocr文件夹,并将这个文件夹复制到了编译程序创建的dist文件夹里去了,某大喜,随后执行了第二条打包程序去除了窗口,并且设置了--onefile选项,执行之后发现我copy的文件不见了,又大慌抓紧在编译程序还没打包成单个文件之前再次copy了一次文件夹,随后经过漫长等待成功打包好了程序,随后经过测试完美执行!

        至此,功成身退!

  • 19
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值