Cython на Termux. ImportError: динамический модуль не определяет функцию экспорта модуля (PyInit_libmc) - PullRequest
1 голос
/ 01 июня 2019

Я пытаюсь использовать python / cython на Android в Termux. Я получил Python, установленный Cython pip - без «очевидных» проблем. Теперь у меня есть два простых тестовых фрагмента

Основной файл mct.py

import os
hm=os.path.expanduser('~')
os.chdir(hm+'/projects/python1/v1')
from libmc import sq

print(sq(4))

и тупо тривиальная библиотека 'Cython'

cpdef double sq(double x):
  return x*x

Я скомпилировал библиотеку простым способом (без fust distutils), т.е. я делаю

cython -3 mct.pyx

clang -shared -pthread -fpic -fwrapv -fno-strict-aliasing -O2 -Wall -I /data/data/com.termux/files/usr/include/python3.7m/ -o libmc.so -lpython3 mc.c

После этого я получаю libmc.so в корне моих проектов. Однако тогда, когда я пытаюсь

python mct.py

Я получаю

Traceback (most recent call last):
  File "mct.py", line 4, in <module>
    from libmc import sq
ImportError: dynamic module does not define module export function (PyInit_libmc)

Теперь я застрял. Что мне здесь не хватает? Любые предложения, чтобы исправить это?

Mark

PS: Просто чтобы уточнить, «нормальный» Python, кажется, хорошо работает для меня на этом Android-боксе.

1 Ответ

0 голосов
/ 01 июня 2019

Имя pyx для должно быть libmc. Cython сгенерирует функцию инициализации на основе имени файла, которое в настоящее время не будет соответствовать тому, что оказывается вызванным файлом .so (когда Python импортирует скомпилированные модули, он ищет функцию инициализации на основе имени файла .so).

...