Android平台Python应用报错:找不到cryptography指定模块
解决ModuleNotFoundError: No module named 'cryptography.hazmat.primitives.asymmetric.types'
问题背景
基于camera4kivy框架开发Android Python应用,集成OpenCV和asyncua时,在Android Studio模拟器运行出现上述模块找不到的错误,buildozer.spec已指定cryptography==41.0.7,调整导入语句位置无效。
修复方案
1. 调整cryptography版本(最常见解决方法)
asyncua与指定的cryptography 41.0.7可能存在兼容性问题,建议降级到经过Python-for-Android验证的稳定版本,比如39.0.1:
修改buildozer.spec中的requirements行:
requirements = python3,kivy==2.2.1,dateutil==2.8.1,camera4kivy,gestures4kivy,opencv,pyOpenSSL,wheel==0.42.0,cryptography==39.0.1,asyncua,typing_extensions,requests,aiofiles,certifi,urllib3
2. 强制打包时包含缺失模块
buildozer打包时可能未自动包含cryptography的深层子模块,在buildozer.spec中添加以下配置强制包含:
android.p4a_args = --include-modules=cryptography.hazmat.primitives.asymmetric.types
3. 清理缓存重新打包
旧的打包缓存可能残留错误依赖,执行以下操作后重新打包:
rm -rf .buildozer buildozer android debug deploy run
说明
调整导入语句位置无法解决问题,因为错误根源是打包后该模块未被正确纳入Android应用的Python环境,而非导入顺序问题。
内容的提问来源于stack exchange,提问作者Hirek
相关产品推荐
相关产品推荐

