Python3.6环境Docker构建Zipline时bcolz编译失败求助
解决Python3.6下安装Zipline时bcolz编译wheel失败的问题
问题根源
你遇到的double类型无法赋值给npy_intp的错误,是因为Zipline依赖的旧版本bcolz与新版numpy/Cython的类型检查规则不兼容——numpy对npy_intp(整数类型)的类型校验变严格后,bcolz源码中未经转换的浮点数赋值会触发编译错误。
解决方案
方案1:指定兼容的依赖版本(推荐)
通过锁定numpy、cython和bcolz的兼容版本,避免类型不匹配问题。在Dockerfile中添加以下命令:
# 先安装指定版本的numpy和cython,确保类型定义匹配 RUN pip install numpy==1.16.6 cython==0.29.21 # 安装兼容bcolz版本 RUN pip install bcolz==1.2.1 # 最后安装ta-lib和zipline RUN pip install ta-lib zipline
方案2:手动修改bcolz源码(如果方案1无效)
如果指定版本仍报错,可直接修改bcolz源码中的类型转换问题:
# 安装基础依赖 RUN pip install numpy==1.16.6 cython==0.29.21 # 克隆指定版本的bcolz源码 RUN git clone https://github.com/Blosc/bcolz.git && cd bcolz && git checkout 1.2.1 # 修改第1685行的类型赋值,添加强制转换 RUN sed -i '1685s/=\(.*\)/= (npy_intp)\1/' bcolz/carray_ext.pyx # 编译安装bcolz RUN cd bcolz && python setup.py install # 安装剩余依赖 RUN pip install ta-lib zipline
方案3:使用预编译的bcolz包
部分平台有针对Python3.6的预编译bcolz wheel,可尝试直接安装:
pip install bcolz==1.2.1 --only-binary bcolz
验证
安装完成后,在容器内执行以下命令确认环境正常:
python -c "import bcolz; import zipline; print('环境验证成功')"
注:Python3.9出现其他错误是因为Zipline官方仅兼容到Python3.6,因此必须保持使用3.5/3.6版本。
内容的提问来源于stack exchange,提问作者Achilles
相关产品推荐
相关产品推荐

