news 2026/3/12 4:18:46

python --打包pyd或so文件

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
python --打包pyd或so文件

编译pyd或so

utils_ccc.py 文件(核心)

# coding: utf-8importargparsefromsetuptoolsimportsetup,ExtensionfromCython.Buildimportcythonize# python 3.10.3 cython==3.1.6frompathlibimportPathfromloguruimportloggerimportshutilimportsys BASE_DIR=Path(__file__).resolve().parent# 项目根路径PYD_PATH=BASE_DIR.joinpath('output_pyd')# pyd输出文件TEMP_PATH=BASE_DIR.joinpath('temp')# 临时文件classCompileTools(object):'''编译'''def__init__(self,py_file:str):self.py_file:Path=Path(py_file)# 待编译文件self._module_name=self.py_file.stem# 文件名(无后缀)self.__C_PATH=BASE_DIR.joinpath(f'{self._module_name}.c')# c文件绝对路径self._system_win:int=1ifsys.platform.startswith("win")else0# 1为win 0为linuxdefunlink_file(self):'''重置目录'''shutil.rmtree(PYD_PATH)# 清空pyd文件夹logger.debug(f'清空:[{PYD_PATH}]')def_get_ext_compile_args_and_compile_args(self)->tuple:'''根据系统生成编译参数'''ifself._system_win==1:# windowsext_compile_args=["/std:c99",# 指定 C99 标准"/O2",# 优化编译(对应 GCC 的 -O2)"/LD"# 生成动态库(对应 GCC 的 -shared)]ext_link_args=[]else:ext_compile_args=["-std=c99",# 指定 C99 标准"-O2",# 优化编译"-fPIC"# 位置无关代码(Linux 必需)]ext_link_args=["-shared"]# 生成动态库returnext_compile_args,ext_link_argsdefstart(self):'''编译'''PYD_PATH.mkdir(parents=True,exist_ok=True)# 创建文件夹TEMP_PATH.mkdir(parents=True,exist_ok=True)# 创建文件夹ext_compile_args,ext_link_args=self._get_ext_compile_args_and_compile_args()ext=Extension(# 定义扩展模块name=self._module_name,# 定义编译后扩展模块的 import 名称(核心,决定你怎么导入)sources=[str(self.py_file),],# 仅作为「扩展模块的元信息标识」(类似标签),不影响 import、不影响编译结果extra_compile_args=ext_compile_args,# 强制编译器用 C99(新标准):支持在 for 循环里直接声明变量(这是现在写 C 代码的常规写法)extra_link_args=ext_link_args# 链接参数(Linux 需加 -shared))setup(# 执行编译name=self._module_name,ext_modules=cythonize(ext,compiler_directives={"language_level":"3",# 强制 Python3 语法"always_allow_keywords":True,# 兼容关键字参数}),script_args=["build_ext"
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/3 7:29:55

Linux关机命令

在Linux系统中,关机可以通过多种命令实现,具体取决于你的需求(如立即关机、定时关机、安全关机等)以及使用的系统管理工具(如systemd或SysVinit)。以下是常用的关机方法:1. 使用 shutdown 命令&…

作者头像 李华
网站建设 2026/3/8 0:02:21

【Django毕设源码分享】基于Django的羽毛球服务管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/2/19 12:41:07

神经网络入门:从零开始构建你的第一个深度学习模型

✨道路是曲折的,前途是光明的! 📝 专注C/C、Linux编程与人工智能领域,分享学习笔记! 🌟 感谢各位小伙伴的长期陪伴与支持,欢迎文末添加好友一起交流! 前言什么是神经网络&#xff1f…

作者头像 李华
网站建设 2026/3/12 0:50:21

动图静图拼图怎么制作?一键实现动静态画面无缝拼图不卡顿

在自媒体创作、表情包制作、文章配图、社交分享、商用素材设计中,单一的动图或静图始终存在表达局限——静图缺乏灵动性,难以吸引注意力;动图过于活泼,容易显得杂乱无章。此时,动图静图拼图成为完美解决方案,将动态GIF…

作者头像 李华
网站建设 2026/3/11 2:28:00

Codeforces Round 1078 (Div. 2) A,B,C,D,E,F1个人题解

A. 割草机数学每个测试时间限制:1秒 每个测试内存限制:256兆字节 夏季别墅的出口由一道栅栏围成,栅栏由 \(n\) 块木板组成,每块木板宽 \(1\) 米。出口的左右两侧是其他地块的栅栏。为了建造浴室,需要移除栅栏中的一些木…

作者头像 李华