1. ホーム
  2. python

[解決済み] Cythonコンパイルエラー:動的モジュールにモジュールエクスポート関数が定義されていない

2022-02-17 01:07:03

質問

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では以下のようなエラーが出てコンパイルできません。

dynamicモジュールにモジュールエクスポート関数が定義されていない

どうすればこの問題を解決できますか?の構造は setup.py が原因で、コンパイルできないのでしょうか?

解決方法は?

Python 3でsetup.pyを呼び出す必要があります( python3 setup.py build_ext もしかしたら --inplace ). これはPython 3で init 関数が呼び出されるので、正しい名前が生成されるように Python 3 を使用してビルドする必要があります。

参照 動的モジュールに init 関数が定義されていない (PyInit_fuzzy) Cythonのsetup.pyでPython3のソースを指定する方法は? をご覧ください(これらの質問と重複しているように見えますが、私の見解ではそうではありません)。