Cython не распознает pymalloc Python
У меня есть среда conda, которая обнаруживает ошибку при использовании Cython. Мне не удалось уменьшить список зависимостей без устранения ошибки, поэтому вот полная среда:
# environment.yml
name: test
channels:
- conda-forge
- defaults
dependencies:
- pip
- compilers
- make
- setuptools
- cython
- daetk
- hdf5 =*=*mpich*
- h5py =*=*mpich*
- metis
- mpich
- numpy
- openblas
- parmetis
- petsc4py
- petsc
- python=3
- scorec
- superlu
- superlu_dist
- triangle
- pychrono
- mpi4py
- gmsh
- matplotlib
- mpi4py
- nose
- pytables
- pytest
- pytest-cov
- pytest-xdist
- scipy
- tetgen
- ncurses
- pychrono
- python=3
- future
- ipyparallel
- pillow
- recordtype
Создайте среду с: conda env create -f environment.yml
Активируйте это: conda activate test
Создать файл helloworld.pyx
:
print("Hello World")
Создать setup.py
:
from distutils.core import setup
from Cython.Build import cythonize
setup(
ext_modules = cythonize("helloworld.pyx")
)
Цитонизируйте это: python setup.py build_ext --inplace
Когда вы импортируете его с python -c "import helloworld"
, вы получите следующую ошибку:
Traceback (most recent call last):
File "<string>", line 1, in <module>
ModuleNotFoundError: No module named 'helloworld'
Он создал файл helloworld.cpython-37-x86_64-linux-gnu.so
, где это должно было быть helloworld.cpython-37m-x86_64-linux-gnu.so
. Действительно, вы можете убедиться, что он работает нормально, если переименуете его:
mv helloworld.cpython-37-x86_64-linux-gnu.so helloworld.cpython-37m-x86_64-linux-gnu.so
А в среде conda m
суффикс присутствует: $CONDA_PREFIX/include/python3.7m
. Я знаю, что это связано с тем, был ли Python скомпилирован с помощью pymalloc, но я не понимаю, почему Cython не видит, что это было в данном случае.
1 ответ
Фактически это было вызвано неработающей сборкой Python 3.7.6 в conda-forge. Это было исправлено.