python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > nuitka python转so 模块

nuitka python 模块转so 模块的过程详解

作者:荣锋亮

Nuitka是一个Python编译器,可将Python代码编译为C++代码并生成.pyd(Windows)或.so(Linux/macOS)文件,提升性能并保护代码,通过解析、翻译、编译和链接步骤,本文介绍nuitka python模块转so模块的方法,感兴趣的朋友一起看看吧

将 Python 模块(通常指的是 .py 文件)转换成 .so 文件(在 Linux 或 macOS 上通常是共享库,而在 Windows 上则为 DLL 文件),通常是为了优化 Python 代码的执行速度或者为了在不需要 Python 解释器的环境中使用 Python 代码。Nuitka 是一个非常流行的工具,可以将 Python 代码编译成独立的可执行文件或扩展模块。

nuitka python 模块转so 模块

nuitka 是一个很不错的python 编译器,可以将python包以及模块编译为一个可以执行运行或者独立so包

一些应用场景

简单使用

比如自己有一个python 模块想进行代码混淆

python -m nuitka --module py_so --include-package=py_so

说明

nuitka 在ai 时代是一个挺不错的python模块分发工具,高效简单,但是就是需要依赖系统(对于agent 还算是比较方便的)

参考资料

https://nuitka.net/

https://github.com/Nuitka/Nuitka

扩展内容:

Nuitka 将 Python 脚本封装为 .pyd 或 .so 文件

环境准备

安装 Python:确保已安装 Python 3.7 或更高版本。

安装 Nuitka

pip install nuitka

验证安装

nuitka --version

Windows 特定要求

Linux/macOS 特定要求

Linux:需要安装 GCC 或 Clang 编译器及开发工具包。例如,在 Ubuntu/Debian 上:

sudo apt update && sudo apt install build-essential

macOS:需要安装 Xcode 命令行工具:

xcode-select --install

相关介绍

什么是 Nuitka?

Nuitka 是一个“实际”的 Python 编译器。它的工作原理是:

与 PyInstaller、cx_Freeze 等打包工具不同,Nuitka 不仅仅是将解释器和脚本捆绑在一起,而是真正地将 Python 代码编译成本地指令,从而带来潜在的性能提升和更强的代码保护。

什么是 .pyd 和 .so 文件?

为什么选择 Nuitka 生成 .pyd/.so?

Nuitka 将 Python 脚本封装为 .pyd 或 .so 文件

准备 Python 脚本

创建一个名为 core_module.py 的文件,内容如下:

# core_module.py
"""
演示 Nuitka 编译为 .pyd/.so 的核心模块。
"""
def calculate_power(base, exponent):
    """计算 base 的 exponent 次方。"""
    return base ** exponent
def process_data(data_list):
    """对数据列表进行简单处理(示例)。"""
    return [x * 2 + 1 for x in data_list]
class DataProcessor:
    """数据处理器类。"""
    def __init__(self, name):
        self.name = name
        self.processed_count = 0
    def transform(self, value):
        result = value ** 2 - value
        self.processed_count += 1
        return result
# 模块常量
VERSION = "1.0"

使用 Nuitka 编译为二进制模块

在命令行中,导航到 core_module.py 所在目录,执行以下命令:

nuitka --module core_module.py
# 或者
nuitka --module core_module.py --output-dir=dist

关键参数说明

推荐的完整命令

nuitka --module --output-dir=dist --remove-output --lto --jobs=4 core_module.py

注意:该命令在 Windows 上会生成 core_module.pyd,在 Linux/macOS 上会生成 core_module.so。Nuitka 会根据运行的操作系统自动选择正确的后缀。

等待编译完成

Nuitka 将执行代码转换、C++ 编译和链接过程。成功后,你将在输出目录(如 dist/)中看到:

输出结果

文件生成与结构

编译成功后,你会得到平台特定的二进制模块文件:

该文件可以直接被 Python 解释器导入,就像导入一个普通的 .py 模块。

使用编译后的二进制模块

创建一个测试脚本 test_module.py 来验证编译后的模块:

# test_module.py
import core_module  # 导入编译后的二进制模块
# 测试函数
power_result = core_module.calculate_power(2, 8)
print(f"2^8 = {power_result}")
processed_data = core_module.process_data([1, 2, 3, 4])
print(f"Processed data: {processed_data}")
# 测试类
processor = core_module.DataProcessor("MyProcessor")
transformed_value = processor.transform(5)
print(f"Transformed 5 -> {transformed_value}")
print(f"Processed count: {processor.processed_count}")
# 访问常量
print(f"Module version: {core_module.VERSION}")

运行测试

确保 test_module.pycore_module.pyd(或 core_module.so)位于同一目录,或 core_module 模块在 Python 的搜索路径中。

运行测试脚本:

python test_module.py

预期输出

2^8 = 256
Processed data: [3, 5, 7, 9]
Transformed 5 -> 20
Processed count: 1
Module version: 1.0

如果输出正确,说明二进制模块已成功编译并可正常工作。

注意事项与常见问题

总结

Nuitka 提供了一种强大而灵活的方式,将 Python 代码编译为平台特定的二进制扩展模块(.pyd.so)。这不仅增强了代码的安全性,还可能带来性能上的好处。通过本教程,你应该已经掌握了从环境搭建、脚本编译到模块使用的完整流程。在实际项目中,可以将敏感算法、核心业务逻辑编译为二进制模块,而将配置、用户界面等部分保留为可读的 Python 脚本,从而在代码保护与开发效率之间取得良好平衡。随着 Nuitka 的持续发展,其对现代 Python 特性的支持和优化能力也在不断增强,是值得考虑的 Python 代码发布与保护方案。

参考

[1] https://nuitka.net/

到此这篇关于nuitka python 模块转so 模块的文章就介绍到这了,更多相关nuitka python 模块转so 模块内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文