我正在使用PyBind11來製作一個Python項目。在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
。或者,與其他擺弄,有時我可以同時運行。
我還沒有想出什麼如何做,但我想做些什麼,是有納入bob
模塊的方式func1
和func2
將是相同的C++代碼,這樣我可以在Python類型bob.myfunc()
。
我該怎麼做?
你嘗過'__init揭露那些功能__ py'? – krassowski
@krassowski:如果我告訴安裝程序不要構建C++的東西,那麼這些函數會自動公開。我認爲兩個軟件包正在申報,而PyBind正在優先考慮。但我會很快檢查你的建議。 – Richard