Cythonモジュールdata.pyxを別のcythonモジュールuser.pyxにインポートしようとしています。すべて正常にコンパイルされますが、pythonモジュールでuser.pyxを呼び出そうとすると、「ImportError:No modulenameddata」というエラーが発生します。
すべてが同じディレクトリにあります。
package/
__init__.py #empty
setup.py
data.pxd
data.pyx
user.pyx
私のsetup.py
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
ext_modules = [
Extension("data", ["data.pyx"]),
Extension("user", ["user.pyx"],include_dirs = ['myPackageDir'])
]
setup(
name = 'app',
cmdclass = {'build_ext': build_ext},
ext_modules = ext_modules
)
次のtest.pyを実行すると、エラーが発生します。
import user #this line raised the 'ImportError: No module named data' below
user.doSomething()
私が得る例外は
Traceback:
File "test.py", line 1, in <module>
import package.user
File "user.pyx", line 1, in init user (user.c:3384)
ImportError: No module named data
どうすればインポートを機能させることができますか?助けてくれてありがとう。
Cythonについて何かが足りないかもしれませんが、次のように思います。
import package.user
user.doSomething()
別のプロジェクトでこの問題が再び発生します。それを解決するために、これが私がしたことです:
import
およびcimport
ステートメントは完全に修飾されている必要がありますrootFolder
に含まれている必要がありますsetup.py
はrootFolder
と同じレベルである必要がありますrooFolder
を含むrootFolder
内のすべてのフォルダには、__init__.py
が含まれている必要がありますsetup.py
に拡張機能のinclude_dirs
には'.'
が含まれている必要がありますこれを説明する簡単なプロジェクトを作成しました ここ 。
これ ページ 私がそれを作成するのを助けました。
しかし、私のプロジェクトはもっと単純で、もしあれば大いに役立ったと思います。
私のプロジェクトは、プロジェクト内のすべてのcythonファイルを自動的にビルドする方法も示しています。