安装Python ZS库出现Command errored out with exit status 1错误如何解决
我正在使用命令 pip install zs 安装Python的ZS库,但执行过程中始终出现如下报错:
command: /Users/user/opt/anaconda3/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '/private/var/folders/86/rclj3l7x7jg9fz8pxnwqx3fw0000gn/T/pip-install-y6w6o5s6/zs_df7e592a69884a79a9c736d8120cade7/setup.py'; __file__='/private/var/folders/86/rclj3l7x7jg9fz8pxnwqx3fw0000gn/T/pip-install-y6w6o5s6/zs_df7e592a69884a79a9c736d8120cade7/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))' bdist_wheel -d /private/var/folders/86/rclj3l7x7jg9fz8pxnwqx3fw0000gn/T/pip-wheel-s4vvw32q cwd: /private/var/folders/86/rclj3l7x7jg9fz8pxnwqx3fw0000gn/T/pip-install-y6w6o5s6/zs_df7e592a69884a79a9c736d8120cade7/
完整输出共244行。
我尝试参考了Stack Overflow上的多个相关问题,但没有可用的解决方案。我使用的是M1芯片的Mac设备,在Ubuntu系统下尝试安装也出现相同报错,仅报错条数略少,看起来像是该库已经无法正常使用了。我的设备已安装gcc包、Mac端Xcode依赖。
报错末尾的部分关键错误信息如下:
zs/_zs.c:5658:19: error: no member named 'exc_traceback' in 'struct _ts'; did you mean 'curexc_traceback'?
*tb = tstate->exc_traceback;
^~~~~~~~~~~~~
curexc_traceback
/Users/lorenzodigianvittorio/opt/anaconda3/include/python3.8/cpython/pystate.h:81:15: note: 'curexc_traceback' declared here
PyObject *curexc_traceback;
^
zs/_zs.c:5670:24: error: no member named 'exc_type' in 'struct _ts'
tmp_type = tstate->exc_type;zs/_zs.c:5671:25: error: no member named 'exc_value' in 'struct _ts'; did you mean 'curexc_value'? tmp_value = tstate->exc_value; ^~~~~~~~~ curexc_value /Users/lorenzodigianvittorio/opt/anaconda3/include/python3.8/cpython/pystate.h:80:15: note: 'curexc_value' declared here PyObject *curexc_value; ^ zs/_zs.c:5672:22: error: no member named 'exc_traceback' in 'struct _ts'; did you mean 'curexc_traceback'? tmp_tb = tstate->exc_traceback; ^~~~~~~~~~~~~
根本原因
该报错源于ZS库已停止维护多年,其底层C扩展仅适配Python 3.7及更早版本的内部API。从Python 3.8开始,CPython重构了线程状态结构体struct _ts的成员命名,将原有的exc_traceback、exc_type、exc_value分别更名为curexc_traceback、curexc_type、curexc_value,导致旧版C代码无法在高版本Python环境下编译通过。
可行解决路径
- 方案1:降级Python版本
直接安装Python 3.7版本的运行环境后再安装ZS库,是成本最低的兼容方案。如果使用conda可执行如下命令创建对应环境:conda create -n py37 python=3.7 conda activate py37 pip install zs - 方案2:手动修复C扩展代码(适合需要在高版本Python使用的场景)
- 下载ZS库源码包:
pip download zs --no-binary :all: - 解压源码包,找到
zs/_zs.c文件,将所有tstate->exc_traceback替换为tstate->curexc_traceback、tstate->exc_type替换为tstate->curexc_type、tstate->exc_value替换为tstate->curexc_value - 在源码根目录执行
pip install .手动编译安装即可
- 下载ZS库源码包:
- 方案3:替换替代库
如果是使用ZS库做零压缩相关处理,可直接替换为仍在官方维护的同类高性能库,适配全版本Python且性能优于废弃的ZS库。
内容的提问来源于stack exchange,提问作者Lorenzo Di Gianvittorio

