专栏首页一日一工具python程序打包新姿势(nuitka)

python程序打包新姿势(nuitka)

python程序打包新姿势(nuitka)

换个方式针对python脚本进行打包, 有些时候我们写的一些脚本里面可能会包含SECRETPASSWORD相关的信息,但是这些脚本有的时候是需要给到其他部门的小伙伴使用,这个时候如何能保障账号密码的安全性呢(当然了,反编译还是防不住的), 获取之前你使用过pyinstaller解决过类似问题,今天我们要说的并不是pyinstaller, 而是nuitka

关于nuitka

Nuitka is a Python compiler written in Python. It's fully compatible with Python 2.6, 2.7, 3.3, 3.4, 3.5, 3.6, 3.7, and 3.8. You feed it your Python app, it does a lot of clever things, and spits out an executable or extension module.

Nuitka是用Python编写的Python编译器。支持Python 2.6、2.7、3.3、3.4、3.5、3.6、3.7和3.8等版本。将你的python程序打包成一个可执行文件。

官网和github

Nuitka对应的github地址[1]

Nuitka官网[2]

说明

单文件或目录

nuitkapyinstaller一样,也是支持生产单文件和目录形式的,如果没有指定,那就是目录形式的,所以要特别注意~

执行时间

复杂的程序进行打包的时候耗时是比较久的,打包速度这点比不上pyinstaller

产物大小

生成的二进制文件大小比较大,这也算是一个不好的点吧~

实战

配套脚本

# 这是官方文档提供的代码片段
# cat main.py
def talk(message):
    return "Talk " + message

def main():
    print( talk("Hello World"))

if __name__ == "__main__":
    main()

安装

pip install nuitka

简单使用

python -m nuitka --standalone  main.py

# 执行结果差异如下

hello-world-demo: python main.py
Talk Hello World


hello-world-demo: ./main.dist/main
Talk Hello World
hello-world-demo:

来个复杂的带配置文件的

原始代码我就不贴了,功能是用来添加阿里云站点监控功能的,之前尝试使用pyinstaller来进行打包,但是么有成功,失败的原因是因为aliyunsdkcore依赖了etry_config.json文件, 而pyinstaller并不能去获取到,我尝试添加目录也没有成功,今天试下nuitka看看是否能够成功。

# 打包前执行效果

aliyun-alert(master) ✗: python alertadd.py www.baidu.com
{"RequestId":"D1DD68D4-7D93-2C94-A362-DF9F1E8C46F4","Data":"29884879351CF69959852ABFC269EFEB26564237","Code":"200","Success":true}
{"RequestId":"048AF305-EC0A-4D3A-8722-C6D2FA163E46","Data":"7A2E57F9E7D1FF3ED242163231A403C526564237","Code":"200","Success":true}


# 打包

python -m nuitka --follow-imports --include-plugin-directory=/aliyun-alert alertadd.py


# 打包后执行效果

aliyun-alert(master) ✗: ./alertadd.bin www.baidu.com

{"RequestId":"E8D95559-9133-4A5E-AEC0-70581DB87A21","Data":"D64121A091FB85A818DB42268E8B5D3F26564254","Code":"200","Success":true}
aliyun-alert(master) ✗:

其他同类工具

nuitka工具的出色程度超出了我的预料(同样也是支持win的),哈哈,是真的香甜可口,除了我们前面提到的工具之后还有什么其他的么?同类工具对比图片来源[3]

总结

刚开始看到nuitka的介绍并没有觉得这个工具会比pyinstaller更好,或者更牛逼,因为个人在使用pyinstaller的时候并不如预期,也有可能我使用姿势不太对,真正的是尝试使用了下,发现还是先入为主的思维害了自己,用着还行~

引用链接

[1] Nuitka对应的github地址: https://github.com/Nuitka/Nuitka [2] Nuitka官网: http://nuitka.net/ [3] 同类工具对比图片来源: https://docs.python-guide.org/shipping/freezing/

本文分享自微信公众号 - 追马Linux(zhuima_k8s),作者:追马

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-07-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python之ip校验简单总结

    Note: 不能校验ip的长度,可以校验每个IP中每段的有效性,和socket结果类似

    追马
  • 使用sonatype/nexus构建企业级内部pypi仓库

    •pypiserver•sonatype/nexus•jfrog Artifactory•devpi•docker-pypi•使用github实现pypi私服•...

    追马
  • vue + flask实现邮件密码找回功能

    •flask•flask-mail•flask-cors•flask_sqlalchemy•pyjwt

    追马
  • 换抵挡装置(Kickdown)

    给出两个长度分别是 n1 , n2 (n1,n2<=100)且每列的高度只为1或2的长条。

    Vincent-yuan
  • LinkedList给我深深的上了节for增强的课

    标题既然这么说,就证明它的确坑了我一把。在平时习惯使用了普通的for循环。所以在写遍历的时候也是经常使用这种。然而一味的使用它,给我带来了麻烦。项目开发中,有一...

    IT大咖说
  • 踩坑筆記 —— ThinkPHP 框架下微信支付

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/de...

    泥豆芽儿 MT
  • python小整数对象池

    整数在程序中使用非常广泛,python为了优化速度,使用了小整数对象池,避免为了整数频繁申请和销毁内存空间. python对小整数的定义时[-5,257]这些书...

    py3study
  • 评分规则的优化(CS GT)

    本文介绍了一个优化适当评分规则的目标。该目标是使预测者付出二元水平的努力,从先验信念中提炼出后验信念的报酬增加最大化。在这个框架中,我们描述了简单环境下最优评分...

    Rosalie
  • 记住以下10条,Linux磁盘与文件系统管理无忧矣

    1、查看当前Linux系统所支持的文件系统:ls -l /lib/modules/$(uname -r)/kernel/fs;目前已加载到内存中支持的文件系统...

    耕耘实录
  • 还没有抢到过年回家的票?Python帮你抢票回家过年

    之前的代码中会让大家在初始化函数中输入自己浏览器驱动的本地路径,很繁琐,可能有些伙伴忘了输入或者有转义字符的问题。这次 pk 哥直接把 driver 的路径赋值...

    叫我龙总

扫码关注云+社区

领取腾讯云代金券