导入Cython .pyx文件时出现导入错误

时间:2018-08-04 10:37:42

标签: python cython

我有一个使用以下代码导入多个软件包的python文件:

from pyzoltan.core.carray import UIntArray, DoubleArray
from pyzoltan.core import zoltan

前两个导入(即UIntArrayDoubleArray已成功导入,而第三个导入(即zoltan给出了ImportError)。

pyzoltan/core目录包含以下文件:

|-- __init__.py
|-- __init__.pyc
|-- carray.pxd
|-- carray.pxd.mako
|-- carray.pyx
|-- carray.pyx.mako
|-- carray.so
|-- generator.py
|-- generator.pyc
|-- msstdint.h
|-- tests
|   |-- 3d_partition.py
|   |-- 3d_partition.pyc
|   |-- __init__.py
|   |-- __init__.pyc
|   |-- __pycache__
|   |   |-- test_zoltan.cpython-27-PYTEST.pyc
|   |-- geometric_partitioner.py
|   |-- geometric_partitioner.pyc
|   |-- mesh.txt
|   |-- test_zoltan.py
|   |-- test_zoltan.pyc
|   |-- zcomm.py
|   |-- zcomm.pyc
|-- zoltan.pxd
|-- zoltan.pyx
|-- zoltan_comm.pxd
|-- zoltan_comm.pyx
|-- zoltan_dd.pxd
|-- zoltan_dd.pyx
|-- zoltan_utils.py
|-- zoltan_utils.pyc

问题是由于缺少zoltan.makozoltan.so还是其他原因造成的?

2 个答案:

答案 0 :(得分:0)

您有carray.so,但没有zoltan.so。无论产生哪种构建过程,前者都应该也能够产生后者(即通过在cythonzoltan.pyx上运行zoltan.pxd)。

答案 1 :(得分:0)

您缺少pyzoltan / core / zoltan.so文件。

Cython可以将.pyx文件编译为.c文件,而C编译器可以将其编译为.so文件(或.pyd Windows上的文件)。

a number of ways来构建Cython代码。正常/推荐的方法是编写一个distutils / setuptools setup.py文件。内容可能看起来像这样:

from distutils.core import setup
from Cython.Build import cythonize

setup(
    ext_modules=cythonize("zoltan.pyx")
)    

然后您可以通过运行来构建.so文件

python setup.py build_ext --inplace

但是,实际上您不需要编写自己的setup.py。如果您安装了core dependencies(并确保它们满足版本要求),请按照installation instructions进行操作,那么zoltan应该已经准备就绪。