1
Python拡張をビルドしてdistutilsを使用してパッケージ化しようとしていますが、拡張子はどのように名前を付けてもルートパッケージにインストールされます。Python Extensionがサブパッケージにインストールされていません
foo/bar/extension.c
マイsetup.py
は次のようになります:私はvirtualenv
を設定
from distutils.core import setup
from distutils.extension import Extension
setup(name='foo.bar.extension',
cmdclass={'build_ext': build_ext},
ext_modules=[Extension('foo.bar.extension',
sources=['foo/bar/extension.c'])]
)
と私のPythonシェルに続いて
python setup.py install
を実行します。
マイディレクトリのレイアウトは次のようになります>>> import foo.bar.extension
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named invest_cython_core
>>> import extension #This works!
最初のimport文が動作し、2番目のimport文が失敗するように変更することはできますか?
お返事ありがとうございます。はい、私はそれが重要であることを認識していませんでしたが、私はCythonのbuild_extモジュールを使用しています。私はこのことについてあまり知らないが、Cythonはネストされた拡張機能でうまく動作しないようだ。私はそれ以来、パッケージのルートに拡張機能を移動し、それはうまく動作しますが、入れ子になった状態でそれを好むでしょう。これは:http://docs.python.org/distutils/index.html#distutils-indexコンパイルされた拡張機能について学ぶために使用するべき唯一のリファレンスですか? – Rich
通常、Cythonのbuild_extクラスは、distutilsのクラスが行うものを拡張するだけでよく、distutilsのdocは十分なはずですが、わかりません。 extをトップレベルに移動する代わりに、__init__.pyファイルを作成するという私の提案をテストしましたか? –
はい、私はもともとプロジェクトをセットアップしていたので、cythonファイルは__init__.pyを持つディレクトリにありました。それはあなたが意味することですか?また、CythonのFAQでは、Cypackをサブパッケージとともにコンパイルできないことが分かりました。私はそれが私の問題が何であるかの記述であるかどうかは分かりません:http://wiki.cython.org/FAQ#HowtocompileCythonwithsubpackages – Rich