构建Docker容器时python-rocksdb编译失败求助
问题
原本正常运行的Docker容器构建流程(安装python-rocksdb)最近1-2周失败,报错:
... Cython.Compiler.Errors.CompileError: rocksdb/_rocksdb.pyx ------------------ ERROR: Failed building wheel for python-rocksdb
可复现的简化版Dockerfile:
FROM python:3.10.2-buster RUN apt-get update && apt-get install -y \ python-dev \ librocksdb-dev \ build-essential \ cmake RUN pip3 install python-rocksdb
已尝试更换镜像、调整安装步骤、源码安装rocksdb,均无法解决问题。
解决方案
1. 指定兼容的Cython版本
python-rocksdb的构建依赖Cython,近期Cython版本更新可能引发兼容性问题,先安装旧版兼容Cython再安装目标包:
FROM python:3.10.2-buster RUN apt-get update && apt-get install -y \ python-dev \ librocksdb-dev \ build-essential \ cmake RUN pip3 install Cython==0.29.36 RUN pip3 install python-rocksdb
2. 手动安装兼容版本的RocksDB库
Debian Buster源中的librocksdb-dev可能已更新至不兼容版本,手动指定旧版RocksDB编译安装:
FROM python:3.10.2-buster RUN apt-get update && apt-get install -y \ python-dev \ build-essential \ cmake \ wget # 安装6.29.5版本的RocksDB,与python-rocksdb兼容性较好 RUN wget https://github.com/facebook/rocksdb/archive/refs/tags/v6.29.5.tar.gz && \ tar xzf v6.29.5.tar.gz && \ cd rocksdb-6.29.5 && \ make shared_lib && \ make install-shared && \ ldconfig && \ cd .. && rm -rf rocksdb-6.29.5 v6.29.5.tar.gz RUN pip3 install python-rocksdb
3. 替换为社区维护的fork包
原python-rocksdb项目维护不及时,可改用社区维护的rocksdb-python替代:
FROM python:3.10.2-buster RUN apt-get update && apt-get install -y \ python-dev \ librocksdb-dev \ build-essential \ cmake RUN pip3 install rocksdb-python
4. 锁定所有依赖版本
通过requirements.txt锁定Cython和python-rocksdb的版本,避免自动更新导致的问题:
创建requirements.txt文件:
Cython==0.29.36 python-rocksdb==0.8.11
修改Dockerfile:
FROM python:3.10.2-buster RUN apt-get update && apt-get install -y \ python-dev \ librocksdb-dev \ build-essential \ cmake COPY requirements.txt . RUN pip3 install -r requirements.txt
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

