Cython在Termux上。 ImportError:动态模块未定义模块导出功能(PyInit_libmc)

时间:2019-06-01 09:31:18

标签: android python cython termux

我正在尝试在Termux中的Android上使用python / cython。我安装了cython pip安装的python-没有“明显”问题。现在,我有两个简单的测试片段

一个“主”文件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

我以简单的方式(没有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)

现在,我被卡住了。我在这里想念什么?有什么建议可以解决此问题吗?

标记

PS:为了澄清,“正常” Python在该Android机器上似乎很适合我。

1 个答案:

答案 0 :(得分:0)

用于的pyx名称必须为libmc。 Cython将基于文件名生成一个初始化函数,该文件名当前与.so文件被称为的文件名不匹配(当Python导入编译模块时,它会基于.so文件名寻找一个初始化函数)。