Python打包生成SO文件完整指南:Linux与Windows实现
本文详细介绍如何使用Cython将Python脚本打包为Linux下的.so文件和Windows下的.pyd(DLL)文件。内容涵盖环境准备、pip镜像配置、setup.py编写及具体编译命令,旨在通过编译混淆实现代码加密与安全性提升,适用于Linux服务器与Windows开发环境。
环境准备与工具安装
准备工作:安装必要的构建工具
首先需要安装Python3环境,并配置Cython库。
pip3 install cython -i http://mirrors.aliyun.com/pypi/simple/
为了加速pip包的下载过程,建议配置国内镜像源。
可用的国内镜像源包括:阿里云(http://mirrors.aliyun.com/pypi/simple/)、中国科学技术大学(https://pypi.mirrors.ustc.edu.cn/simple/)、豆瓣(http://pypi.douban.com/simple/)以及清华大学(https://pypi.tuna.tsinghua.edu.cn/simple/)。
在Linux系统中,还需安装python-devel和gcc编译器。
通过命令检查当前系统是否已安装gcc及其版本信息。
gcc --version

若未安装,需根据服务器操作系统版本自行安装对应的gcc编译环境及python-devel包。
pip3 install python-devel -i http://mirrors.aliyun.com/pypi/simple/
Linux下生成SO文件实战
Linux环境下生成SO文件的测试流程
新建一个名为so_test的目录作为工作空间。
mkdir so_test
在该目录下创建需要封装的源代码文件test.py。
import datetime
class DataCenter():
def gettime(self):
print(datetime.datetime.now())
def write_data(self):
print("hello XiaoBoData!")
同时创建用于调用该模块的测试脚本so_test.py。
from test import DataCenter
data = DataCenter()
data.gettime()
data.write_data()
在正式进行SO封装前,先运行so_test.py以确保原始代码逻辑执行无误。

接着,在同级目录下创建用于构建打包的配置文件setup.py。
from test import DataCenter
data = DataCenter()
data.gettime()
data.write_data()
最终的项目目录结构应包含上述所有文件。

在项目根目录下执行命令python3 setup.py build_ext进行编译构建。

编译耗时取决于代码规模与文件大小。
构建成功后,当前目录会生成一个test.c源文件及build目录。最终的SO文件位于build/lib.linux-aarch64-3.5/路径下。请注意,不同服务器架构生成的SO文件名可能不同,但生成路径结构一致。

将生成的SO文件复制到原test.py所在的目录,随后删除test.py、test.c以及build文件夹。最后再次执行python3 so_test.py以验证功能是否正常。

测试结果表明流程可行。经过加密处理后的SO文件在功能上等同于原py文件,仅将明文转换为二进制密文,后缀由py变为so,从而有效提升了代码的安全性。
Windows下生成PYD文件指南
Windows环境下生成PYD文件(即DLL)
在Windows系统中,生成的动态链接库文件扩展名为.pyd,其本质等同于DLL。
测试逻辑与Linux类似,同样需要mytest.py作为源文件,dll_test.py作为调用脚本。
创建名为setupDll.py的构建配置文件。
# !/usr/bin/env python
# -*- coding: utf-8 -*-
from distutils.core import setup
from Cython.Build import cythonize
from distutils.extension import Extension
def main():
# 这里为文件名 可以增加多个Extension(' ', [' '])
extensions = [Extension('mytest', ['mytest.py'])]
setup(ext_modules=cythonize(extensions))
if __name__ == '__main__':
main()
在PyCharm的Terminal终端中执行命令Python setupDll build_ext以生成PYD文件。

生成的.pyd文件位于build文件夹内,其调用方式与Linux下的SO文件保持一致。
# !/usr/bin/env python
# -*- coding: utf-8 -*-
#如果不想改变pyd路径,则需要在dll_test.py中加入:
import sys
sys.path.append('./build/lib.win-amd64-3.7/')
from mytest import DataCenter
def main():
data = DataCenter()
data.gettime()
data.write_data()
if __name__ == '__main__':
main()
运行测试脚本,确认结果输出正确。

至此,关于Python打包生成SO及PYD文件的实现教程介绍完毕。如需了解更多相关内容,建议查阅本站过往文章或关注后续更新,感谢支持。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









