c++打包pyd文件給Python使用調用函數
C語言源碼:
simplemath.cpp代碼:
//
// Created by ASFOR on 2025/9/11.
//
#include <pybind11/pybind11.h>namespace py = pybind11;// 一個簡單的加法函數
int add(int a, int b) {return a + b;
}// 一個簡單的乘法函數
int multiply(int a, int b) {return a * b;
}// 定義 Python 模塊
PYBIND11_MODULE(simplemath, m) {m.doc() = "A simple math module written in C++";m.def("add", &add, "Add two numbers");m.def("multiply", &multiply, "Multiply two numbers");
}
CMakeLists.txt代碼如下:
cmake_minimum_required(VERSION 3.28)
project(simplemath)set(CMAKE_CXX_STANDARD 17)# pybind11 include 路徑
include_directories("E:/Users/29165/AppData/Roaming/Python/Python313/site-packages/pybind11/include")# Python include 和 libs
include_directories("D:/software/Python/Python313/include")
link_directories("D:/software/Python/Python313/libs")# 編譯成 Python 擴展模塊
add_library(simplemath MODULE simplemath/simplemath.cpp)# Windows 下生成 .pyd 而不是 .dll
set_target_properties(simplemath PROPERTIESPREFIX ""SUFFIX ".pyd"
)# 鏈接 Python 庫
target_link_libraries(simplemath python313)
pyproject.toml代碼如下:
[build-system]
requires = ["setuptools", "wheel", "pybind11>=2.6.0"]
build-backend = "setuptools.build_meta"
setup.py代碼如下:
from setuptools import setup, Extension
import pybind11ext_modules = [Extension("simplemath", # Python 導入模塊名["simplemath/simplemath.cpp"], # C++ 源文件路徑include_dirs=[pybind11.get_include()], # pybind11 頭文件language="c++",),
]setup(name="simplemath",version="0.1",author="Your Name",description="A simple C++ extension for Python",ext_modules=ext_modules,zip_safe=False,
)
生成文件夾目錄
其中pyd為可執行引用的Python代碼。
調用時的代碼:
import sys# 添加 .pyd 文件所在目錄
sys.path.append(r"E:\Pycharmproject\pythonProject1\pyd")# 導入模塊
import simplemath# 調用函數
print(simplemath.add(3, 5))
print(simplemath.multiply(4, 6))