2016-04-19 3 views
8

Я создаю пакет в Cython. Я использую следующие как структура для setup.py:Ошибка компиляции Cython: динамический модуль не определяет функцию экспорта модуля

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 module does not define module export function

Как я могу решить эту проблему? Является ли структура setup.py причиной, почему это не компилируется?

ответ

4

Вам необходимо позвонить setup.py с помощью Python 3 (python3 setup.py build_ext, возможно --inplace). Это связано с тем, что Python 3 определяет другое имя для функции init, вызываемой при запуске модуля, поэтому вам нужно создать его с помощью Python 3, чтобы обеспечить правильное имя.

См Cython Compilation Error: dynamic module does not define module export function и How to specify Python 3 source in Cython's setup.py? чуть более подробно (это граничащей с дубликата этих вопросов, но не совсем, на мой взгляд)

Смежные вопросы