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. Это было исправлено.

Другие вопросы по тегам