2017-03-09 4 views
2

私はCythonのラップされたC++プロジェクトFooを、py_foo.Bar()といういくつかのクラスを公開するpythonラッパーとともに持っています。プロジェクトは.pxdファイルと.pyxファイルを使用して通常定義され、標準の `setup.py 'を使ってインストールされます。メソッド。プロジェクト間のCython定義ですか?

私は別のCythonラッププロジェクトBazを持っていて、そのコンストラクタにはFoo.Barのインスタンスを持つC++クラスがあります。今、私は変換と型エラーを見ています。 Barはタイプ識別子ではありません。

import/cimport複数のプロジェクトで利用できますか?

答えて

0

はい、間違いありません。 Cython documentationから:

あなたはモジュール名と呼ばれるモジュール、Cythonコンパイラmodulename.pxdと呼ばれるファイルのための 検索をcimport

。インクルードファイル(-Iコマンドライン オプションまたはcythonize()へのinclude_pathオプション)で指定されているようなファイル と、 sys.pathを検索します。

package_dataを使用してsetup.pyスクリプトに.pxdファイルをインストールする は、他のパッケージがモジュールのアイテムを に依存するように設定します。また

、あなたはファイルmodulename.pyxをコンパイルするたびに、対応する 定義ファイルmodulename.pxdが最初に含ま パス(ではないのsys.path)に沿って検索され、見つかった場合、それは 処理の前に処理され、 .pyxファイル

重要な部分は中間段落です。あなたのsetup.pyあなたのCythonクラスが定義されているプロジェクトのファイルでは、package_dataキーに.pxdファイルをリストする必要があります。たとえば、

# setup.py 
setup(
    name='my_cython_package', 
    packages=['example'], 
    package_data={'example': '*.pxd'}, # or wherever the files are 
    # ...etc... 
) 

これにより、残りのパッケージとともにインストールされ、他のプロジェクトでそれらをインポートできます。

関連する問題