我有一个使用以下代码导入多个软件包的python文件:
from pyzoltan.core.carray import UIntArray, DoubleArray
from pyzoltan.core import zoltan
前两个导入(即UIntArray
和DoubleArray
已成功导入,而第三个导入(即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.mako
和zoltan.so
还是其他原因造成的?
答案 0 :(得分:0)
您有carray.so
,但没有zoltan.so
。无论产生哪种构建过程,前者都应该也能够产生后者(即通过在cython
和zoltan.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
应该已经准备就绪。