У меня есть файл 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
или чего-то еще?
У вас есть carray.so
но не zoltan.so
. Каким бы ни был построенный процесс сборки, первый должен иметь возможность производить и последнее (т. cython
zoltan.pyx
cython
на zoltan.pyx
и zoltan.pxd
).
Вам не хватает файла pyzoltan/core/zoltan.so.
Файл .pyx
может быть скомпилирован Cython в .c
файл, который может быть скомпилирован компилятором C
для файла .so
(или .pyd
в Windows).
Существует несколько способов создания кода Cython. Нормальным/рекомендуемым способом является запись файла setup.py
distutils/setuptools. Содержимое может выглядеть примерно так:
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. Если вы устанавливаете основные зависимости (и убедитесь, что они удовлетворяют требованиям к версии), следуйте инструкциям по установке, после чего вы должны zoltan
.
setup.py
но теперь при запуске кода на python я получаю еще одну ошибку импорта,ImportError: /home/invinciblycool/Documents/SEM5/pdc_lab/venv/local/lib/python2.7/site-packages/pyzoltan/core/zoltan.so: undefined symbol: Zoltan_Set_Obj_List_Fn
Я знаю, что это может быть очень трудно понять, но любая помощь приветствуется.