nuitka 打包请注意版本

版本查询

python -m nuitka --version

 默认下载的是下面的版本

上面那个版本 运行下面的代码,参数--nofollow-imports这个参数不起作用

import os 

def __main(main : str):
    parameters = [
       				# 使用gcc编译器来编译得到的C和C++源文件
        '--standalone',				# 构建独立软件,也就是将于系统有关的运行库和Python运行时打包
        '--show-progress',			# 展示打包过程
        '--show-memory',			# 打印打包时的内存占用
        '--nofollow-imports',		# 不打包import语句导入的包(因为nuitka自动导入的库有问题,后面我们会手动导入,这样成功率更高)
        '--plugin-enable=multiprocessing',
        '--experimental=use_peephole',
        '--output-dir=dist'	,		# 存放构建结果的文件夹
        '--follow-import-to=need'

    ]

    param_str = " ".join(parameters)
    command = "python -m nuitka  {} {}".format(param_str, main)

    os.system(command)

__main("main.py")

我们需要卸载上面的版本安装下面的版本

sudo python -m pip install  nuitka==0.6.19.5

 注意0.6.19.5打包会报错 ,所以我最终还是选择了最新版本1.8.4

User
module.omegaconf.dictconfig.c: In function ‘impl_omegaconf$dictconfig$$$function__27_items’:
module.omegaconf.dictconfig.c:18338:13: error: label ‘function_exception_exit’ used but not defined
             goto function_exception_exit;
             ^~~~

 命令解释

--mingw64 默认为已经安装的vs2017去编译,否则就按指定的比如mingw(官方建议)
--standalone 独立环境,这是必须的(否则拷给别人无法使用)
--windows-disable-console 没有CMD控制窗口
--output-dir=out 生成exe到out文件夹下面去
--show-progress 显示编译的进度,很直观
--show-memory 显示内存的占用
--include-qt-plugins=sensible,styles 打包后PyQt的样式就不会变了
--plugin-enable=qt-plugins 需要加载的PyQt插件
--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结尾的叫模块
--show-memory 显示内存
--show-progress 显示编译过程
--follow-imports 全部编译
--nofollow-imports 不选,第三方包都不编译
--follow-stdlib 仅选择标准库
--follow-import-to=MODULE/PACKAGE 仅选择指定模块/包编译
--nofollow-import-to=MODULE/PACKAGE 选择指定模块/包不进行编译

 自己记录

1.不知道为什么1.9.4打包的程序运行报错,又退回到1.8.4了

2.如果只打包自己写的那些,其他的都是从site-packages里面去拉库也是可以的,但是很费劲的一个个找,唯一的好处可能是他拉了一次之后,后面再编译就会很快,然后替换掉之前的

3.测试完全编译的那种是生成的.bin 不完全编译的生成的没有后缀,且完全编译的那种我的代码执行需要等待21秒 不完全编译的执行等待需要28秒,完全编译还是要快一些

### 使用 Nuitka 打包 Flask 应用程序 Nuitka 是一种用于将 Python 代码转换为 C++ 并编译成独立可执行文件的工具。通过这种方式可以显著提高应用程序的运行速度并保护源码不被泄露。以下是关于如何使用 Nuitka 将 Flask 应用程序打包的具体方法。 #### 准备工作 在开始之前,确保已经安装了必要的依赖项以及配置好环境变量。可以通过以下命令来设置国内镜像加速 PyPI 下载过程[^4]: ```bash pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple ``` 接着安装 Redis 和 `flask-session` 模块以便支持会话存储功能[^2]: ```bash pip install redis pip install flask-session ``` 如果尚未安装 Nuitka,则需要先完成其安装: ```bash pip install nuitka ``` #### 创建简单的 Flask 应用程序 假设我们有一个名为 `app.py` 的简单 Flask 应用程序如下所示: ```python from flask import Flask, jsonify app = Flask(__name__) @app.route('/') def home(): return jsonify({"message": "Hello, world!"}) if __name__ == '__main__': app.run() ``` 此脚本定义了一个基本路由 `/` ,当访问该路径时返回 JSON 数据 {"message": "Hello, world!"}。 #### 使用 Nuitka 进行打包 为了创建一个独立的应用程序(无需额外依赖),可以利用 `--standalone` 参数调用 Nuitka 来构建整个项目及其所需库到单个目录中[^3]: ```bash nuitka --standalone app.py ``` 上述命令将会生成一个新的子目录 (默认命名为 `dist/app`) 包含所有必需组件,包括已编译好的二进制文件和静态资源等。 对于更复杂的场景可能还需要指定附加选项比如嵌入特定模块或者排除不必要的部分。例如要显式包含某个第三方库可以用参数 `--include-package=your_module_name`;而为了避免某些未使用的标准库加载则可通过 `--nofollow-import-to=unwanted_lib` 实现优化[^1]。 另外值得注意的是,在实际部署过程中还应该考虑目标平台架构差异等因素影响最终产物兼容性问题。 --- ### 注意事项 - 如果应用中有动态导入逻辑,请务必确认这些模块也被正确加入到最后的结果集中。 - 对于大型 Web 应用来说,完全冻结可能会增加启动时间因此需权衡利弊决定是否采用此类方式发布产品版本---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Y_Hungry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值