我目前正在尝试编写一个 'setup.py' 脚本,当用户安装 Python 包时,它会自动编译我的 C++ 扩展并与 'pybind11' 绑定。在 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。
请注意,我可以使用Mingw-w64
手动编译**main.cpp**
成**pybind11_example.pyd**
:
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,而不需要手动进行。
setup.cfg
的方法可能会对您有所帮助。 - Pak Uula