在Docker Python3.10环境安装curl-cffi>=0.5.9时遇链接错误,如何解决?
解决Docker Alpine环境中安装curl-cffi>=0.5.9的链接错误
问题场景
在python:3.10-alpine3.18镜像构建过程中,执行pdm install安装curl-cffi>=0.5.9时,链接器报错找不到libcurl-impersonate-chrome库。
错误日志
#12 50.74 gcc -shared #12 50.74 build/temp.linux-x86_64-cpython-310/build/temp.linux-x86_64-cpython-310/curl_cffi._wrapper.o build/temp.linux-x86_64-cpython-310/curl_cffi/ffi/shim.o #12 50.74 -L/usr/local/lib -L/usr/local/lib -lcurl-impersonate-chrome -o #12 50.74 build/lib.linux-x86_64-cpython-310/curl_cffi/_wrapper.abi3.so #12 50.74 /usr/lib/gcc/x86_64-alpine-linux-musl/12.2.1/../../../../x86_64-alpine-linux-musl/bin/ld: cannot find -lcurl-impersonate-chrome: No such file or directory #12 50.74 collect2: error: ld returned 1 exit status #12 50.74 error: command '/usr/bin/gcc' failed with exit code 1 #12 50.74 #12 50.74 See /tmp/pdm-install-g3swgott.log for detailed debug log. #12 50.74 [InstallationError]: Some package operations are not complete yet #12 50.74 Add '-v' to see the detailed traceback #12 ERROR: process "/bin/sh -c pdm install" did not complete successfully: exit code: 1
原Dockerfile
FROM python:3.10-alpine3.18 MAINTAINER jiangxiaoqiang (jiangtingqiang@gmail.com) ENV LANG=en_US.UTF-8 \ LC_ALL=en_US.UTF-8 \ TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime \ && echo $TZ > /etc/timezone \ && mkdir -p /root/visa \ && apk update \ && apk add gcc wget curl vim musl-dev libstdc++ curl-dev g++ RUN pip install pdm ADD . /root/visa/ WORKDIR /root/visa/ RUN pdm install ENTRYPOINT exec /root/visa/scripts/startup-app.sh
解决方案
核心原因
curl-cffi>=0.5.9依赖curl-impersonate-chrome库,但Alpine Linux官方软件源未提供该预编译包,必须手动编译安装。
修改后的Dockerfile
FROM python:3.10-alpine3.18 MAINTAINER jiangxiaoqiang (jiangtingqiang@gmail.com) ENV LANG=en_US.UTF-8 \ LC_ALL=en_US.UTF-8 \ TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime \ && echo $TZ > /etc/timezone \ && mkdir -p /root/visa \ && apk update \ && apk add --no-cache gcc wget curl vim musl-dev libstdc++ curl-dev g++ git autoconf automake libtool openssl-dev \ # 编译安装curl-impersonate-chrome && git clone https://github.com/lwthiker/curl-impersonate.git /tmp/curl-impersonate \ && cd /tmp/curl-impersonate \ && ./build.sh chrome \ && cp -r build/chrome/* /usr/local/ \ && ldconfig \ # 清理编译临时文件与冗余依赖 && rm -rf /tmp/curl-impersonate \ && apk del git autoconf automake libtool RUN pip install pdm ADD . /root/visa/ WORKDIR /root/visa/ RUN pdm install ENTRYPOINT exec /root/visa/scripts/startup-app.sh
关键调整说明
- 添加编译依赖:新增
git、autoconf、automake、libtool、openssl-dev,满足curl-impersonate的编译需求。 - 编译安装核心库:克隆官方仓库,编译Chrome版本的curl-impersonate,将产物复制到系统目录并更新链接缓存,确保系统能找到该库。
- 镜像瘦身:编译完成后删除临时文件与不再需要的编译工具,减少镜像体积。
内容的提问来源于stack exchange,提问作者Dolphin
相关产品推荐
相关产品推荐

