Dockerfile中使用python:3.9-alpine安装cffi失败

11

我试图使用docker-compose运行下面的Dockerfile。 我搜索了一下,但是我找不到如何在python:3.9-alpine上安装cffi的解决方案。

我还阅读了这篇帖子,它指出pip 21.2.4或更高版本可能是一个解决方案,但对我来说并没有解决问题。

https://www.pythonfixing.com/2021/09/fixed-why-i-getting-this-error-while.html

FROM python:3.9-alpine

ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

COPY ./requirements.txt .

RUN apk add --update --no-cache postgresql-client

RUN apk add --update --no-cache --virtual .tmp-build-deps \
    gcc libc-dev linux-headers postgresql-dev
RUN pip3 install --upgrade pip && pip3 install -r /requirements.txt

RUN apk del .tmp-build-deps

RUN mkdir /app
WORKDIR /app
COPY . /app

RUN adduser -D user

USER user

这是 requirements.txt 文件。

asgiref==3.5.0
backports.zoneinfo==0.2.1
certifi==2021.10.8
cffi==1.15.0
cfgv==3.3.1
...

错误信息:
process-exited-with-error
#9 47.99   
#9 47.99   × Running setup.py install for cffi did not run successfully.
#9 47.99   │ exit code: 1
#9 47.99   ╰─> [58 lines of output]
#9 47.99       Package libffi was not found in the pkg-config search path.
#9 47.99       Perhaps you should add the directory containing `libffi.pc'
#9 47.99       to the PKG_CONFIG_PATH environment variable
#9 47.99       Package 'libffi', required by 'virtual:world', not found
#9 47.99       Package libffi was not found in the pkg-config search path.
#9 47.99       Perhaps you should add the directory containing `libffi.pc'
#9 47.99       to the PKG_CONFIG_PATH environment variable
#9 47.99       Package 'libffi', required by 'virtual:world', not found
#9 47.99       Package libffi was not found in the pkg-config search path.
#9 47.99       Perhaps you should add the directory containing `libffi.pc'
#9 47.99       to the PKG_CONFIG_PATH environment variable
#9 47.99       Package 'libffi', required by 'virtual:world', not found
#9 47.99       Package libffi was not found in the pkg-config search path.
#9 47.99       Perhaps you should add the directory containing `libffi.pc'
#9 47.99       to the PKG_CONFIG_PATH environment variable
#9 47.99       Package 'libffi', required by 'virtual:world', not found
#9 47.99       Package libffi was not found in the pkg-config search path.
#9 47.99       Perhaps you should add the directory containing `libffi.pc'
#9 47.99       to the PKG_CONFIG_PATH environment variable
#9 47.99       Package 'libffi', required by 'virtual:world', not found
#9 47.99       running install
#9 47.99       running build
#9 47.99       running build_py
#9 47.99       creating build
#9 47.99       creating build/lib.linux-aarch64-3.9
#9 47.99       creating build/lib.linux-aarch64-3.9/cffi
#9 47.99       copying cffi/__init__.py -> build/lib.linux-aarch64-3.9/cffi
#9 47.99       copying cffi/cffi_opcode.py -> build/lib.linux-aarch64-3.9/cffi
#9 47.99       copying cffi/commontypes.py -> build/lib.linux-aarch64-3.9/cffi
#9 47.99       copying cffi/vengine_gen.py -> build/lib.linux-aarch64-3.9/cffi
#9 47.99       copying cffi/vengine_cpy.py -> build/lib.linux-aarch64-3.9/cffi
#9 47.99       copying cffi/backend_ctypes.py -> build/lib.linux-aarch64-3.9/cffi
#9 47.99       copying cffi/api.py -> build/lib.linux-aarch64-3.9/cffi
#9 47.99       copying cffi/ffiplatform.py -> build/lib.linux-aarch64-3.9/cffi
#9 47.99       copying cffi/verifier.py -> build/lib.linux-aarch64-3.9/cffi
#9 47.99       copying cffi/error.py -> build/lib.linux-aarch64-3.9/cffi
#9 47.99       copying cffi/setuptools_ext.py -> build/lib.linux-aarch64-3.9/cffi
#9 47.99       copying cffi/lock.py -> build/lib.linux-aarch64-3.9/cffi
#9 47.99       copying cffi/recompiler.py -> build/lib.linux-aarch64-3.9/cffi
#9 47.99       copying cffi/pkgconfig.py -> build/lib.linux-aarch64-3.9/cffi
#9 47.99       copying cffi/cparser.py -> build/lib.linux-aarch64-3.9/cffi
#9 47.99       copying cffi/model.py -> build/lib.linux-aarch64-3.9/cffi
#9 47.99       copying cffi/_cffi_include.h -> build/lib.linux-aarch64-3.9/cffi
#9 47.99       copying cffi/parse_c_type.h -> build/lib.linux-aarch64-3.9/cffi
#9 47.99       copying cffi/_embedding.h -> build/lib.linux-aarch64-3.9/cffi
#9 47.99       copying cffi/_cffi_errors.h -> build/lib.linux-aarch64-3.9/cffi
#9 47.99       warning: build_py: byte-compiling is disabled, skipping.
#9 47.99       
#9 47.99       running build_ext
#9 47.99       building '_cffi_backend' extension
#9 47.99       creating build/temp.linux-aarch64-3.9
#9 47.99       creating build/temp.linux-aarch64-3.9/c
#9 47.99       gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -DTHREAD_STACK_SIZE=0x100000 -fPIC -DUSE__THREAD -DHAVE_SYNC_SYNCHRONIZE -I/usr/include/ffi -I/usr/include/libffi -I/usr/local/include/python3.9 -c c/_cffi_backend.c -o build/temp.linux-aarch64-3.9/c/_cffi_backend.o
#9 47.99       c/_cffi_backend.c:15:10: fatal error: ffi.h: No such file or directory
#9 47.99          15 | #include <ffi.h>
#9 47.99             |          ^~~~~~~
#9 47.99       compilation terminated.
#9 47.99       error: command '/usr/bin/gcc' failed with exit code 1
#9 47.99       [end of output]
#9 47.99   
#9 47.99   note: This error originates from a subprocess, and is likely not a problem with pip.
#9 47.99 error: legacy-install-failure
#9 47.99 
#9 47.99 × Encountered error while trying to install package.
#9 47.99 ╰─> cffi
#9 47.99 
#9 47.99 note: This is an issue with the package mentioned above, not pip.
#9 47.99 hint: See above for output from the failure.

2
让我为您阅读错误信息... "需要'libffi'软件包" 嗯! - Klaus D.
3个回答

21

缺少libffi库。

将其添加到您的Dockerfile中:

RUN apk add libffi-dev

19

@Klaus D.的评论非常有帮助。我更新了Dockerfile:

RUN apk add --update --no-cache --virtual .tmp-build-deps \
    gcc libc-dev linux-headers postgresql-dev \
    && apk add libffi-dev

1
只安装libffi-dev并不能满足我的需求,但是这个解决了问题。谢谢! - Nikhil VJ
12
在使用alpine标记的Python镜像时,我遇到了与cffi相关的相同问题。无论是Python 3.9还是3.10都无法成功构建。我所需要做的最小添加是: RUN apk add gcc libc-dev libffi-dev - whatapalaver
它与RUN apk add gcc musl-dev libffi-dev一起运行良好,而且它会更轻巧。 - undefined

-1

如果您正在安装在openjdk:11.0.11-jre-slim-buster Docker容器上运行的Python软件包,并且遇到了这个问题。请按照以下命令构建您的Docker镜像。

RUN apt-get install -y build-essential libssl-dev libffi-dev python-dev
RUN python3 -m pip install --upgrade pip
COPY ./requirements.txt /

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接