Charm库导入报错:无法从charm.core.math.integer导入integer问题排查
错误根因
这个导入错误和你写的导入语句语法无关,核心是Charm Crypto的整数运算核心模块没有正确安装/加载,具体原因分为三类:
- 依赖缺失:Charm的
charm.core.math.integer模块依赖GMP、PBC、OpenSSL三个底层库,编译Charm时如果没有检测到这三个依赖,会跳过整数模块的编译,自然无法导出integer类 - 版本不匹配:你当前使用的Charm-Crypto 0.43版本需要搭配PBC 0.5.14使用,如果本地安装的PBC版本过高/过低,或者Charm版本和代码示例不匹配,也会出现符号导出失败的问题;此外Charm-Crypto 0.43仅兼容Python 3.7~3.8,使用3.9及以上版本也会出现核心模块编译失败的问题
- 环境路径冲突:你当前报错的Charm路径在
/home/ubuntu/pbc-0.5.14/Charm-Crypto-0.43/下,如果你本地Python环境还安装了其他版本的Charm,导入时会出现路径优先级错误,加载到不完整的模块
解决步骤
按优先级逐一尝试:
- 先补全底层依赖,重新编译Charm
Ubuntu环境执行以下命令安装依赖:sudo apt update && sudo apt install libgmp-dev libpbc-dev libssl-dev python3-dev -y
进入Charm-Crypto-0.43源码目录,执行编译命令:./configure.sh # 执行完上一步后检查输出,确认`Integer module support`状态为yes再继续 make sudo make install - 调整导入顺序
将核心模块的导入语句放到最前面,修改你的导入代码为:from charm.core.math.integer import integer, randomBits, random, randomPrime, isPrime, encode, decode, hashInt, bitsize, legendre, gcd, lcm, serialize, deserialize, int2Bytes, toInt from charm.toolbox.integergroup import IntegerGroup from charm.schemes.pkenc.pkenc_rsa import RSA_Enc, RSA_Sig - 排查路径冲突
执行以下命令确认当前Python导入的Charm路径是否正确:python3 -c "import charm; print(charm.__file__)"
如果输出的路径不是你编译的/home/ubuntu/pbc-0.5.14/Charm-Crypto-0.43/相关路径,执行pip uninstall charm-crypto卸载掉其他版本的Charm,再重新编译安装你需要的版本即可。
内容的提问来源于stack exchange,提问作者Rajesh Choudhary
相关产品推荐
相关产品推荐

