2016-04-19 10 views
8

Ich baue ein Paket in Cython. Ich bin mit dem folgenden als Struktur für setup.py:Cython-Kompilierungsfehler: dynamisches Modul definiert Modul-Exportfunktion nicht

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

aber ich erhalte eine Fehlermeldung bei der Installation in Python 3. Es ist in Python 2 arbeiten jedoch es kompiliert nicht in Python 3 den folgenden Fehler mit :

dynamic module does not define module export function

Wie kann ich dieses Problem lösen? Ist die Struktur der setup.py der Grund, warum dies nicht kompiliert?

Antwort

4

Sie müssen setup.py mit Python 3 aufrufen (python3 setup.py build_ext, vielleicht --inplace). Das liegt daran, dass Python 3 einen anderen Namen für die Funktion init definiert, die beim Start des Moduls aufgerufen wird. Daher müssen Sie Python 3 mit Python 3 erstellen, um sicherzustellen, dass der korrekte Name generiert wird.

Siehe Cython Compilation Error: dynamic module does not define module export function und How to specify Python 3 source in Cython's setup.py? für etwas detaillierter (es ist auf einem Duplikat dieser Fragen am Rande, ist aber nicht ganz meiner Meinung nach)

Verwandte Themen