导入ccxt、eospy、libeospy时触发InvalidKeyFile报错求助
问题现象
导入集成eospy、libeospy依赖的ccxt 1.42.7版本时触发运行异常,报错调用栈如下:
File "/app/venv/lib/python3.9/site-packages/ccxt/bullish_nav.py", line 29, in <module> from eospy.cleos import EOSKey File "/app/venv/lib/python3.9/site-packages/eospy/cleos.py", line 6, in <module> from .keys import EOSKey, check_wif File "/app/venv/lib/python3.9/site-packages/eospy/keys.py", line 6, in <module> from .utils import sha256, ripemd160, str_to_hex, hex_to_int File "/app/venv/lib/python3.9/site-packages/eospy/utils.py", line 5, in <module> from .exceptions import InvalidKeyFile
运行环境为基于Python 3.9官方基础镜像搭建的Docker服务,搭载的操作系统版本信息:
NAME="Debian GNU/Linux" VERSION_ID="10" VERSION="10 (buster)" VERSION_CODENAME=buster ID=debian
环境内已安装的相关Python包版本:
- Python: 3.9
- eospy: 0.0.2
- libeospy: 2.1.0
- ccxt: 1.42.7
根因定位
问题由包命名空间冲突、旧版本适配缺陷两个核心问题叠加触发:
- 同时安装
eospy 0.0.2和libeospy 2.1.0会直接破坏导包逻辑:libeospy是eospy的社区分叉重构版本,两个包对外暴露的导入根路径均为eospy,Python导包时会按sys.path的排序优先加载路径靠前的包内文件,直接打断正常的模块引用链,这是最主要的诱因。 - 你安装的
eospy 0.0.2是2019年发布的老旧版本,本身未做Python 3.9、Debian 10自带OpenSSL 1.1.1版本的适配,其内部调用ripemd160等哈希算法的逻辑依赖系统旧版加密库,缺失依赖时会在加载exceptions模块前抛出底层C库加载错误,最终报错栈就停在导入InvalidKeyFile这一行,容易误导排查方向。 - ccxt 1.42.7版本的bullish_nav模块写死了原生eospy的导入路径,本身不兼容libeospy的接口定义。
修复方案
按以下顺序操作即可解决问题:
- 先彻底卸载所有存在冲突的相关包,执行命令:
pip uninstall -y eospy libeospy ccxt - 安装Debian 10环境缺失的加密编译依赖,解决底层哈希算法加载失败的问题:
apt update && apt install -y libssl-dev libffi-dev python3-dev - 固定版本安装适配ccxt 1.42.7的eospy版本,禁止额外安装libeospy(两者无法共存):
pip install eospy==0.0.3 ccxt==1.42.7 - 验证修复结果:执行
python -c "import ccxt; print('ccxt load success, version:', ccxt.__version__)",无报错即为修复完成。
如果业务必须使用libeospy 2.1.0版本,直接将ccxt升级到1.50.0及以上版本即可,该版本之后ccxt已经适配了libeospy的导入路径,不会触发命名空间冲突问题。
内容的提问来源于stack exchange,提问作者Amit
相关产品推荐
相关产品推荐

