当前位置: 首页 > 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

相关文章:

  • 腾讯四面面经
  • 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
  • 非洲雕刻艺术有着怎样的“变形之美”
  • 经济日报金观平:充分发挥超大规模市场优势
  • 邯郸一酒店办婚宴发生火灾,新郎母亲:饭没吃成酒店还要收费
  • 印称一名高级官员在巴基斯坦发动的袭击中死亡
  • 4月证券私募产品备案量创23个月新高,股票策略占比超六成
  • 近4小时会谈、3项联合声明、20多份双边合作文本,中俄元首今年首次面对面会晤成果颇丰