Я использую 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.
Как я могу это сделать?
Ответ должен был изменить код в 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
)
Других решений пока нет …