gpt4 book ai didi

python - 如何使用 Python、pybind11 和 Mingw-w64 构建 setup.py 来编译 C++ 扩展?

转载 作者:行者123 更新时间:2023-12-01 13:08:20 25 4
gpt4 key购买 nike

我目前正在尝试编写一个“setup.py”脚本,当用户安装 python 包时,它会自动编译与“pybind11”绑定(bind)的 C++ 扩展。在 Windows 中,使用“VS19 MSVC”编译器没有任何问题。但是如果用户安装了“MinGW-w64”,我会尝试实现它。
这些是包文件:

**main.cpp**    #include <pybind11/pybind11.h>        int add(int i, int j) {        return i + j;    }        namespace py = pybind11;        PYBIND11_MODULE(pybind11_example, m) {            m.def("add", &add);    }
**setup.py**

from setuptools import setup, Extension
import pybind11

ext_modules = [
Extension(
'pybind11_example',
sources = ['main.cpp'],
include_dirs=[pybind11.get_include()],
language='c++'
),
]

setup(
name='pybind11_example',
ext_modules=ext_modules
)
将这两个文件放在同一个文件夹中并从命令提示符运行:
    python setup.py build
如果用户有 VS19 MSVC编译器安装成功生成 **pybind11_example.pyd**可以测试它与 python 一起运行:
    import pybind11_example as m
print(m.add(1, 2))
但是如果用户有 Mingw-w64安装的编译器会引发错误,指出需要 Visual Studio 2015。
请注意,我可以轻松编译 **main.cpp**进入 **pybind11_example.pyd**手动使用 Mingw-w64运行:
    g++ -static -shared -std=c++11 -DMS_WIN64 -fPIC -I C:\...\Python\Python38\Lib\site-packages\pybind11\include -I C:\ ... \Python\Python38\include -L C:\ ... \Python\Python38\libs main.cpp -o pybind11_example.pyd -lPython38
有没有办法写 **setup.py**在某种程度上,如果用户拥有带有 MinGW-w64 的 Windows编译器自动编译 **main.cpp**进入 **pybind11_example.pyd**安装软件包时不需要手动制作?

最佳答案

查看 this question 的答案.他们试图解决相反的情况,强制使用 msvc 而不是 mingw,但 setup.cfg 的方法可能会对您有所帮助。
here答案演示了如何根据设置工具所做的选择指定命令行参数:如果是 msvc,则一组参数,另一组用于 mingw。
我相信第二种方法应该适合您的需求 - 无论安装了哪个编译器,您都有正确的命令行来构建您的模块。

关于python - 如何使用 Python、pybind11 和 Mingw-w64 构建 setup.py 来编译 C++ 扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62325373/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com