热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

Nuitka,100%兼容标准python2python3,静态编译你的python程序1.概述Nuitka(nuitka.net&#

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


推荐阅读
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 本文介绍了如何在C#中启动一个应用程序,并通过枚举窗口来获取其主窗口句柄。当使用Process类启动程序时,我们通常只能获得进程的句柄,而主窗口句柄可能为0。因此,我们需要使用API函数和回调机制来准确获取主窗口句柄。 ... [详细]
  • 本文探讨了如何优化和正确配置Kafka Streams应用程序以确保准确的状态存储查询。通过调整配置参数和代码逻辑,可以有效解决数据不一致的问题。 ... [详细]
  • 本文详细介绍了一种通过MySQL弱口令漏洞在Windows操作系统上获取SYSTEM权限的方法。该方法涉及使用自定义UDF DLL文件来执行任意命令,从而实现对远程服务器的完全控制。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • ServiceStack与Swagger的无缝集成指南
    本文详细介绍了如何在ServiceStack项目中集成Swagger,以实现API文档的自动生成和在线测试。通过本指南,您将了解从配置到部署的完整流程,并掌握如何优化API接口的开发和维护。 ... [详细]
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 20100423:Fixes:更新批处理,以兼容WIN7。第一次系统地玩QT,于是诞生了此预备式:【QT版本4.6.0&#x ... [详细]
  • 阿里云ecs怎么配置php环境,阿里云ecs配置选择 ... [详细]
  • Windows 7 64位系统下Redis的安装与PHP Redis扩展配置
    本文详细介绍了在Windows 7 64位操作系统中安装Redis以及配置PHP Redis扩展的方法,包括下载、安装和基本使用步骤。适合对Redis和PHP集成感兴趣的开发人员参考。 ... [详细]
  • 本文详细介绍了在 Windows 7 系统中配置 Nginx 1.10.3 和 PHP 7.1.1 NTS 的步骤,包括修改 PHP 配置文件、处理依赖项以及创建批处理脚本启动和停止服务。重点解释了如何解决常见的运行时错误。 ... [详细]
author-avatar
377926138_b741aa
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有