Смешивание исходных файлов Python и C ++ в 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
)

Теперь, если я бегу

python setup.py install

все компилируется.

Но вот странная часть, позже я могу запустить import cppmodule но нет import bob, Или, с другой игрой, иногда я могу запустить оба.

То, что я не понял, как это сделать, но то, что я хотел бы сделать, это включить код C ++ в bob модуль так же func1 а также func2 будет, так что я могу напечатать bob.myfunc() в Python.

Как я могу это сделать?

1

Решение

Ответ должен был изменить код в 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
)
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]