无法导入Cython模块:按官方教程编译后导入失败如何解决?
解决Pydroid3中导入Cython编译的.so文件报错问题
原因及解决步骤
1. 转移.so文件到Pydroid私有目录
Android存储权限限制了外部存储(如/storage/emulated/0/...)的文件访问,Pydroid的Python解释器默认命名空间无法直接读取这类路径下的文件:
- 将生成的
helloworld.cpython-39.so复制到Pydroid的私有工作目录,比如/data/user/0/ru.iiec.pydroid3/files/,或者你当前在Pydroid中打开的项目目录(可通过Pydroid文件管理器查看当前路径)。 - 之后在Pydroid终端执行
import helloworld尝试导入。
2. 直接在Pydroid私有目录内编译
- 打开Pydroid文件管理器,在内部存储的Pydroid专属目录下创建项目文件夹(比如
cython_demo)。 - 将
helloworld.pyx和setup.py移动到该文件夹,在终端进入此目录后重新执行编译命令(如python setup.py build_ext --inplace)。生成的.so文件会直接存放在该目录,之后可直接导入。
3. 检查存储权限与文件权限
- 确认Pydroid已开启存储访问权限,可在系统设置的应用权限中查看并开启。
- 若文件仍在外部存储,可尝试通过终端添加可读权限:
chmod +r /storage/emulated/0/Documents/temp/helloworld.cpython-39.so(注:部分Android版本可能因权限机制限制,此方法不一定生效)。
4. 验证Python版本一致性
确保编译使用的Python版本与Pydroid内的版本完全一致(均为3.9),版本不匹配会导致导入失败。可在终端执行python --version确认版本信息。
内容的提问来源于stack exchange,提问作者magpayang developer
相关产品推荐
相关产品推荐

