当前位置: 首页 > news >正文

cython编译pyd并且c调用

cython代码

d.pyx

def func01(n):
    for i in range(n):
        print(f'func01({i})')
    return n*2

编译代码

setup.py

from setuptools import setup
from Cython.Build import cythonize
from Cython.Distutils import Extension  # 需要导入Extension类

# 创建Extension对象并指定模块名称
ext_modules = [
    Extension(
        name="d",                #这里指定模块名称
        sources=["d.pyx"],       # 源文件列表
        language_level="3"        # 可选:Python3语法
    )
]

setup(
    ext_modules=cythonize(ext_modules)  # 将Extension对象传入cythonize
)

cython编译命令

python setup.py build_ext --inplace

a.c

#include <Python.h>

int main() {
    Py_Initialize();
    
    // 导入模块
    PyObject* pModule = PyImport_ImportModule("d");
    if (!pModule) {
        PyErr_Print();
        return 1;
    }
    
    // 获取函数
    PyObject* pFunc = PyObject_GetAttrString(pModule, "func01");
    if (!pFunc || !PyCallable_Check(pFunc)) {
        PyErr_Print();
        Py_DECREF(pModule);
        return 1;
    }
    
    // 准备参数
    PyObject* pArgs = PyTuple_Pack(1, PyLong_FromLong(3));
    
    // 调用函数
    PyObject* pResult = PyObject_CallObject(pFunc, pArgs);
    
    // 处理结果
    if (pResult) {
        printf("res = %ld\n", PyLong_AsLong(pResult));
        Py_DECREF(pResult);
    }
    
    // 清理
    Py_DECREF(pArgs);
    Py_DECREF(pFunc);
    Py_DECREF(pModule);
    Py_Finalize();
    
    return 0;
}

c代码编译



gcc  -I 你的python.h头文件所在目录  -L 你的python3.dll所在目录 -l python3  a.c

http://www.dtcms.com/a/86737.html

相关文章:

  • 腾讯四面面经
  • Qt-Q_ENUM宏和QMetaEnum类
  • rocky linux 与centos系统的区别
  • 16.Linux蓝牙从硬件驱动到应用
  • HTTP核心知识
  • vue插槽传送和接收item
  • pyqt5报错:qt.qpa.plugin: Could not find the Qt platform plugin “xcb“(已解决)
  • Linux安装Ollama+MaxKB建立本地知识库
  • 2024年MathorCup数学建模C题物流网络分拣中心货量预测及人员排班解题全过程文档加程序
  • SpringBoot(8)——Springboot数据层开发
  • 【Linux文件IO】Linux中文件属性与目录操作的API介绍和用法
  • 第三章 | 初识 Solidity:开发环境搭建 第一个智能合约{介绍篇}
  • Codeforces Round 1012 (Div. 2) 3.23
  • 零基础上手Python数据分析 (8):Pandas 核心数据结构 Series 和 DataFrame
  • 【博客节选】再谈Unity 的 root motion
  • 【算法】入门详解
  • asp.net mvc 向前端响应json数据。用到jquery
  • 描述@keyframes规则在 CSS 动画中的原理及作用,如何创建一个简单的动画
  • 大厂技术博客总结
  • MySQL 5.7升级8.0报异常:ONLY_FULL_GROUP_BY
  • 猿大师中间件:如何在最新Chrome浏览器Web网页内嵌本地OCX控件?
  • Docker学习笔记(十二)docker镜像没有vi怎么优雅的编辑文本
  • FAQ - VMware vSphere Web 控制台中鼠标控制不了怎么办?
  • Cursor学习总结
  • 正则表达式基本语法和Java中的简单使用
  • LiteIDE中配置golang编译生成无CMD窗口EXE的步骤
  • Mybatis——04
  • 【Python】基于OpenAI API实现PDF发票信息提取
  • Linux 基础入门操作 第十一章 图形界面设计
  • 【day2】数据结构刷题 栈