python代码封装加密_静态编译python源代码,使用Nuitka加密你的py源码

Nuitka,100%兼容标准python2/python3,静态编译你的python程序

1. 概述

Nuitka(nuitka.net)可以将python代码转换为C++,然后编译为可执行文件,其通过直接调用python的api的方式实现从解析语言到编译语言的转换,并且在转换到C++的过程中直接使用python的解释器,可以保证100%的语法兼容,作者宣称100%通过了python的测试用例,作者也宣称可以加速python代码0%~258%。

对比于cx_freeze/py2exe等打包工具,Nuitka则是完全的编译工具,编译后的可执行文件已经不需要字节码解释了,从这点看,已经很像VB6程序依赖于msvbvm60.dll一样了,都是调用dll内的api实现各种功能。

并且nuitka相比cython更帅气的一点是:享受编译福利的同时,你不需要和动态行为说再见。

2. 安装

首先到官网上根据你的python版本下载对应的nuitka安装包,直接执行安装即可,如果安装完成后系统环境变量中没有nuitka安装目录,建议添加。

其次要实现编译,得需要一个编译环境,在windows环境下可以安装微软的VS套件(至少是VS2012,VC6是编译不过的),或者按照MinGW(推荐,小巧,编译速度比VS快)。

安装完编译环境后,要将其bin目录添加到系统的环境变量,以便nuitka调用。

3.编译

直接调用

nuitka –exe yourmodule.py

复制代码

则编译生成yourmodule.exe,试一下直接执行吧。

如果要完全脱离python环境,可以使用命令行

nuitka –exe –recurse-all –standalone –mingw –icon=app_icon.ico yourmodule.py

复制代码

则会将所有依赖的包全部编译然后链接成一个单一的exe文件(依赖的pyd和dll无法链接,会拷贝到目标文件夹)

编译过程很慢,要有耐心!而且目标文件会比较大,要有心理准备。

一般情况下Nuitka生成的exe会比cx_freeze等打包后的exe要大不少,不过现在的计算机不用在乎这一点大小了吧。

4.nuitka的一些问题

尽管nuitka已经很稳定了,但是软件都是有bug的,我这里就列出几个我遇到的

1.python3+pyqt无法脱离python使用

此问题是nuitka不够智能,没有将pyqt所有的依赖都拷贝到目标文件夹所致,所以你要手工拷贝如下文件或目录:

sip.pyd,libEGL.dll,plugins\imageformats\,plugins\platforms\

2.dll/pyd过多

nuitka会将所有依赖的dll都拷贝到目标文件夹,而不管是否是系统标准dll,这样导致目标文件夹很多dll文件,所以编译完成后你可以手动删除这些dll,可能还有一些pyd文件是程序不需要的,也可以删除。

3.无法方便获取当前运行目录

打包工具都会将sys.executable设置为当前执行文件,但是nuitka为了100%和python兼容,没有设置此值,而__file__没有目录信息,所以需要调用操作系统api来获取了,我这里封装了一个简单的函数:

def getModuleFilePath():

#在使用nuitka编译后获取当前运行目录,当前仅工作于windows

import ctypes

try:

GetModuleFileName = ctypes.windll.kernel32.GetModuleFileNameA

except:

return os.path.dirname(os.path.realpath(__file__))

szPath = ctypes.create_string_buffer(b’\x00′*2048)

GetModuleFileName.argtypes = [ctypes.c_int, ctypes.c_char_p, ctypes.c_int]

GetModuleFileName(0, szPath, 2048)

return os.path.dirname(str(szPath.value))

复制代码

5.结论

我也是经过了一段时间的观望和测试才决定使用nuitka的。

评测结果:通过所有测试用例,可执行文件很大(十多兆),内存占用和打包工具打包后的exe基本一样,效率提升一点点,没有源代码泄漏的担心。

从一段时间的实际使用和测试来看,完全可以部署于生产环境。

当然如果你对文件大小比较敏感并且不在意源代码泄漏的话(pyc很容易被反编译),建议使用打包工具代替。

转载自:http://bbs.chinaunix.net/thread-4151005-1-1.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值