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
の構造は、これがコンパイルされない理由ですか?
Python 3(python3 setup.py build_ext
、おそらく--inplace
)でsetup.pyを呼び出す必要があります。 Python 3はモジュールの起動時に呼び出されるinit
関数に別の名前を定義しているため、正しい名前が生成されるようにPython 3を使用してビルドする必要があるためです。
動的モジュールがinit関数を定義しない(PyInit_fuzzy) および を参照してくださいPython 3ソースの指定方法Cythonのsetup.py? でもう少し詳しく(これらの質問の重複に隣接していますが、私の見解ではありません)