在 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
)