私はPythonプロジェクトを作るのにPyBind11を使っています。pybind11でPythonとC++のソースファイルを混ぜる
私のディレクトリ構造は次のようになります。
./
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
は実行できません。または、他の手品で、時々私は両方を動かすことができます。私が行う方法が、私がやりたいものを考え出したていない何
は、私はPythonでbob.myfunc()
を入力することができるように、bob
モジュールfunc1
とfunc2
がされるのと同じ方法に組み込まれたC++コードを持つことです。
どうすればいいですか?
あなたは__init __ 'でこれらの機能をさらすみましたpy'。? – krassowski
@krassowski:セットアップでC++のものをビルドしないように指示すると、関数は自動的に公開されます。 2つのパッケージが宣言され、PyBindが優先されていると思います。私はすぐにあなたの提案をチェックします。 – Richard