在 pybind11 中混合 Python 和 C++ 源文件
Mixing Python and C++ source files in pybind11
我正在使用 PyBind11 制作一个 Python 项目。
我的目录结构如下所示:
./
my_pkg/
__init__.py
func1.py
func2.py
我的 C++ 代码如下所示:
int myfunc(){
return 1;
}
PYBIND11_PLUGIN(cppmodule) {
py::module m("cppmodule", "My cpp module");
m.def("myfunc",&myfunc,"This does stuff");
return m.ptr();
}
我的 setup.py
看起来像这样:
from setuptools import setup, Extension
import glob
ext_modules = [
Extension(
"cppmodule",
glob.glob('src/*.cpp'),
include_dirs = ['lib/include', 'lib/pybind11/'],
language = 'c++',
extra_compile_args = ['-std=c++17'],
define_macros = [('DOCTEST_CONFIG_DISABLE',None)]
)
]
setup(name = 'bob',
version = '0.1',
description = 'A package about shrimp',
url = 'http://github.com/shrimp',
author = 'Bob',
author_email = '',
license = 'MIT',
ext_modules = ext_modules
)
现在,如果我 运行n
python setup.py install
编译一切。
但这是奇怪的部分,稍后,我可以 运行 import cppmodule
但不能 import bob
。或者,通过其他摆弄,有时我可以 运行 两者。
我还没有弄清楚该怎么做,但我想做的是以相同的方式 func1
和 [=20] 将 C++ 代码合并到 bob
模块中=] 将是,这样我就可以在 Python.
中键入 bob.myfunc()
我该怎么做?
答案是将 setup.py
中的代码修改为:
from setuptools import setup, Extension, find_packages
setup(name = 'bob',
version = '0.1',
description = 'A package about shrimp',
url = 'http://github.com/shrimp',
author = 'Bob',
author_email = '',
license = 'MIT',
packages = find_packages(),
ext_modules = ext_modules
)
我正在使用 PyBind11 制作一个 Python 项目。
我的目录结构如下所示:
./
my_pkg/
__init__.py
func1.py
func2.py
我的 C++ 代码如下所示:
int myfunc(){
return 1;
}
PYBIND11_PLUGIN(cppmodule) {
py::module m("cppmodule", "My cpp module");
m.def("myfunc",&myfunc,"This does stuff");
return m.ptr();
}
我的 setup.py
看起来像这样:
from setuptools import setup, Extension
import glob
ext_modules = [
Extension(
"cppmodule",
glob.glob('src/*.cpp'),
include_dirs = ['lib/include', 'lib/pybind11/'],
language = 'c++',
extra_compile_args = ['-std=c++17'],
define_macros = [('DOCTEST_CONFIG_DISABLE',None)]
)
]
setup(name = 'bob',
version = '0.1',
description = 'A package about shrimp',
url = 'http://github.com/shrimp',
author = 'Bob',
author_email = '',
license = 'MIT',
ext_modules = ext_modules
)
现在,如果我 运行n
python setup.py install
编译一切。
但这是奇怪的部分,稍后,我可以 运行 import cppmodule
但不能 import bob
。或者,通过其他摆弄,有时我可以 运行 两者。
我还没有弄清楚该怎么做,但我想做的是以相同的方式 func1
和 [=20] 将 C++ 代码合并到 bob
模块中=] 将是,这样我就可以在 Python.
bob.myfunc()
我该怎么做?
答案是将 setup.py
中的代码修改为:
from setuptools import setup, Extension, find_packages
setup(name = 'bob',
version = '0.1',
description = 'A package about shrimp',
url = 'http://github.com/shrimp',
author = 'Bob',
author_email = '',
license = 'MIT',
packages = find_packages(),
ext_modules = ext_modules
)