2016-04-19 15 views
8

Tôi đang xây dựng một gói trong Cython. Tôi đang sử dụng những điều sau đây là cấu trúc cho setup.py:Lỗi biên dịch Cython: mô-đun động không xác định chức năng xuất mô-đun

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

Tuy nhiên, tôi nhận được một lỗi khi cài đặt bằng Python 3. Nó được làm việc trong Python 2 tuy nhiên, nó không phải là biên soạn bằng Python 3 có các lỗi sau :

dynamic module does not define module export function

Làm cách nào để giải quyết vấn đề này? Cấu trúc của số setup.py là lý do tại sao điều này không được biên dịch?

Trả lời

4

Bạn cần gọi setup.py bằng Python 3 (python3 setup.py build_ext, có thể --inplace). Đó là vì Python 3 định nghĩa một tên khác cho hàm init được gọi khi mô-đun bắt đầu và vì vậy bạn cần phải xây dựng nó bằng cách sử dụng Python 3 để đảm bảo tên chính xác được tạo.

Xem Cython Compilation Error: dynamic module does not define module export functionHow to specify Python 3 source in Cython's setup.py? để xem chi tiết hơn một chút (nó tiếp giáp trên một bản sao của những câu hỏi này, nhưng không phải là khá quan điểm của tôi)

Các vấn đề liên quan