2017-08-12 4 views
1

私は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モジュールfunc1func2がされるのと同じ方法に組み込まれたC++コードを持つことです。

どうすればいいですか?

+0

あなたは__init __ 'でこれらの機能をさらすみましたpy'。? – krassowski

+0

@krassowski:セットアップでC++のものをビルドしないように指示すると、関数は自動的に公開されます。 2つのパッケージが宣言され、PyBindが優先されていると思います。私はすぐにあなたの提案をチェックします。 – Richard

答えて

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 
) 
+0

は現在同じ問題を抱えています...この答えを使用すると、今すぐ 'bob.myfunc() 'を呼び出すことができますか、今は2つのパッケージがインストールされていますか? –

+0

@BenjaminMaier:私は私が持っていたよりもはっきりと答えたことがわかります。 'bob'という名前のパッケージをpybind11のコードを' _bob'という名前のパッケージにコンパイルし、 '__init __。py'で' '_bob''の束をインポートして'ボブ。 – Richard

+0

賢い!ありがとうございました –

関連する問題