Python打包生成SO文件完整指南:Linux与Windows实现

陈默
陈默
发布时间:2026-10-14 | 4人浏览过
原创

本文详细介绍如何使用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文件的实现教程介绍完毕。如需了解更多相关内容,建议查阅本站过往文章或关注后续更新,感谢支持。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表