1

Python 拡張機能をビルドして distutils を使用してパッケージ化しようとしていますが、どのように名前を付けても、拡張機能はルート パッケージにインストールされます。私のディレクトリレイアウトは次のようになります。

foo/bar/extension.c

setup.pyはこのように見えます:

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'])]
)

を設定してvirtualenv実行します

python setup.py install

次に、私のPythonシェルで:

>>> 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 ステートメントが失敗するようにするには、何を変更できますか?

4

1 に答える 1

1

distutils が最初にこれらのパッケージをインストールし、次に拡張モジュールをインストールするにはfoo/__init__.py、 andが必要だと思います。foo/bar/__init__.py(ここでは、黙って不正行為を行うよりもエラーの方がよいでしょう。distutils2 がより適切に動作するように、バグ レポートを開きます。)

カスタムの build_ext クラスを使用していますか? (あなたの例での質問cmdclass={'build_ext': build_ext})それが問題の一部になる可能性があります。

于 2012-01-04T15:45:50.850 に答える