2016-04-19 13 views
8

Buduję pakiet w Cython. Używam dalej jako struktury dla setup.py:Błąd kompilacji Cython: moduł dynamiczny nie definiuje funkcji eksportu modułu

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), 
) 

Jestem jednak otrzymuję błąd podczas instalacji w Pythonie 3. pracuje w Pythonie 2, jednak nie jest to kompilacja w Pythonie 3 mający następujący błąd :

dynamic module does not define module export function

Jak mogę rozwiązać ten problem? Czy struktura setup.py jest powodem, dla którego nie jest to kompilacja?

Odpowiedz

4

Musisz wywołać setup.py z Pythonem 3 (python3 setup.py build_ext, może --inplace). Dzieje się tak, ponieważ Python 3 definiuje inną nazwę funkcji init, która jest wywoływana podczas uruchamiania modułu, dlatego należy ją zbudować za pomocą Pythona 3, aby zapewnić poprawną nazwę.

Zobacz Cython Compilation Error: dynamic module does not define module export function i How to specify Python 3 source in Cython's setup.py? dla nieco bardziej szczegółowo (to graniczącego z duplikatu tych pytań, ale nie jest całkiem moim zdaniem)

Powiązane problemy