2017-07-12 15 views
1

I次のパッケージ構造を有する:PythonパッケージCythonモジュール

+ repo/ 
+ setup.py 
+ package/ 
    + module1/ 
     + submodule1.py 
     + submodule2.pyx 
    + module2/ 
     + submodule3.py 

私のようなものでsubmodule1.pyからsubmodule2.pyxを使用したい:

import submodule2 

が、私は絶対にないアイデアを持っていませんこれを行う方法。私は私のsetup.pyに次の行を追加しようとしました:

from distutils.core import setup 
from setuptools import setup 
from Cython.Distutils import build_ext 

ext_modules = cythonize(Extension(
     "zindex", 
     sources=["ndmg/graph/zindex.pyx"], 
     language="c", 
)) 
for e in ext_modules: 
    e.pyrex_directives = {"boundscheck": False} 

setup(
    name='ndmg', 
    ext_modules = ext_modules, 
    packages=[ 
     'package', 
     'package.module1', 
    .... 
) 

しかし失敗しました。私が見つけることができるチュートリアルはすべて非常に単純化された例を持っていたので、残りのパッケージがちょうど普通のPythonコードであるときに私のPythonパッケージにCythonモジュールを含める方法がわかりません。誰かが私が従うことができる良い例はありますか、誰かが私が間違っていることを教えてもらえますか?

ありがとうございます!

+0

'python setup.py build_ext --inplace'を実行している間、OS、コンパイラ、エラー(もしあれば)/出力に関する情報を提供してください。 linuxと仮定すると、あなたのディレクトリツリーのどこかにsubmodule2.soがあるかどうか確認してください。 – darked89

+0

より正確に言うと、コンパイルされたモジュール名は次のようになります。* .cpython-36m-x86_64-linux-gnu.so – darked89

+0

'から試しましたか? submodule1.pyのimport submodule2'? –

答えて

1

cythonizeに与えられた名前は、Cythonがモジュールを呼び出すときに使用する名前と、それをどのようにインポートする必要があるのか​​です。

上記のsetup.pyはzindexと呼ばれるネイティブ拡張を生成し、パッケージのZIndexでも、Pythonのファイル内import zindexとしてインポートする必要があります。

from distutils.core import setup 
from setuptools import setup 
from Cython.Distutils import build_ext 

ext_modules = cythonize(Extension(
     "ndmg.graph.zindex", 
     sources=["ndmg/graph/zindex.pyx"], 
     language="c", 
)) 
<..> 

ビルドや拡張機能をインストールします。ここでは

はこれを行う方法の一例です。

ndmg/graph/py_index.pyの下のpythonファイルで実行できます。

from zindex import <..> 

をcythonモジュールからインポートします。

関連する問題