python应用源码保护和打包分发

本文探讨了Python应用的源码保护和打包分发方法,包括PyInstaller、Nuitka和Cython的使用。PyInstaller作为主流打包工具,Nuitka通过C语言编译提升运行效率,Cython则用于将Python代码编译为C扩展。此外,文章还提到了添加启动画面、ccache加速编译以及Python与C/C++混合编程的手段。
摘要由CSDN通过智能技术生成

农夫山泉,喝起来有点甜;python应用,运行起来有点慢。但,除了慢,它就别无缺点了。

当你能根据pyc, pyd和平台动态库随意定制裁剪你的发行包时,你就出师了。打包是一个不断优化、不断瘦身的过程。

前言

只有打包,才方便分发,才能流传后世。故此,颇有研究必要。
PyQt + pyinstaller成为一些中小项目界面包装和软件分发的优良选择。多快好省,省去很多烦恼。
打包主要是收集依赖,其次是形成正确的目录结构,最后才是包装成平台需要的可执行程序。

打包工具:PyInstaller,nuitka,cx_Freeze,PyOxidizer,PyInstaller-Qt,PyInstaller-PySide,Py2exe
首选pyinstaller,次选nuitka。pyinstaller打包速度快,但nuitka打包后的程序运行更快,代码更难被破解。nuitka打包会遇到各种问题,需要逐一解决,且首次打包速度比较慢。

python各种文件

  • py: 源代码
  • pyc:编译后的中间代码。Python源代码import后,编译生成的字节码,类似于java的class文件。例如__pycache__ 目录用于存放pyc
  • pyo: 优化编译后的程序
  • pyd: 文件是用Python 编写的动态链接库,可以在运行时由其他Python 代码运行。 它包含一个或多个Python 模块,便于代码重用,并为编写应用程序提供模块架构。pyd库可以被python调用,也可以被C或其它程序调用。ctypes.cdll.LoadLibrary()用于加载pyd文件。.pyd 文件一般是其他语言编写的 python 扩展模块,例如D语言。

Python程序分发思考

总体思路:根据需要,将不同库转成不同格式的文件,如pyc和pyd,然后由一个加载器统一记载。在pyinstaller里,这个加载器是bootloader。例如包含核心资产的代码编译成pyd,一些开源的第三方包转成pyc即可,这样加快编译速度。

  1. pyinstaller 打包, – 需要各平台单独打包。有反编译风险。
  2. 用 Cython 将 py 编译成 .pyd/.so ->在用 pyinstaller 进行打包 。 – 各平台单独打包分发、反编风险小
  3. pyarmor 是一个专业混淆代码库,也是编译成字节码然后用-> pyinstaller 打包分发 ---- 各平台单独打包分发、反编风最小
  4. Nuitka 直接使用 Clang 进行编译运行。

Cython

cythonize可以将py文件编译成pyd。

pip install Cython
cythonize -i -3 --directive always_allow_keywords=true xxx.py

python中调用pyd:

import ctypes

# 加载 Pyd 文件
mylib = ctypes.cdll.LoadLibrary('mylib.pyd')

# 调用 Pyd 文件中的函数
result = mylib.add(1, 2)

# 打印结果
print(result)

pyinstaller

pyinstaller目前是市面上主流的、老牌的打包工具,成熟稳定,美中不足的是打出的包体积有点大,启动有点慢&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

北极象

如果觉得对您有帮助,鼓励一下

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

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

打赏作者

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

抵扣说明:

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

余额充值