web-dev-qa-db-ja.com

Cythonコンパイルエラー:動的モジュールはモジュールエクスポート関数を定義しません

Cythonでパッケージを構築しています。 setup.pyの構造として次を使用しています。

from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize
import numpy
import scipy

extensions = [
    Extension("xxxxx",["xxxx/xxxxx.pyx"],
    include_dirs=[numpy.get_include(),"."]),
    Extension("nnls",["xxxxx/xxxxx.pyx"],
              include_dirs=[numpy.get_include(),"."]),
]

setup(
    name='xxxxxx',
    version='0.0.0',
    description='''********''',
    url='xxxxxxx',
    author='xxxxx',
    author_email='xxxxx',
    packages=[
        'xxxxx',
    ],
    install_requires=[
        'cython',
        'numpy',
        'scipy',
    ],
    ext_modules=cythonize(extensions),
)

ただし、インストール時にPython 3でエラーが発生します。Python 2で動作しますが、次のエラーが発生するPython 3ではコンパイルされません。 :

動的モジュールはモジュールエクスポート関数を定義しません

この問題を解決するにはどうすればよいですか? setup.pyの構造は、これがコンパイルされない理由ですか?

13
Alger Remirata

Python 3(python3 setup.py build_ext、おそらく--inplace)でsetup.pyを呼び出す必要があります。 Python 3はモジュールの起動時に呼び出されるinit関数に別の名前を定義しているため、正しい名前が生成されるようにPython 3を使用してビルドする必要があるためです。

動的モジュールがinit関数を定義しない(PyInit_fuzzy) および を参照してくださいPython 3ソースの指定方法Cythonのsetup.py? でもう少し詳しく(これらの質問の重複に隣接していますが、私の見解ではありません)

6
DavidW