我正在尝试为依赖于lxml
的{{1}}软件包的应用构建较小的图像(我的bs4
仅具有这两个软件包)。
这就是我所拥有的:
Pipfile
该构建工作正常,但是当我尝试在第二阶段图像中运行我的应用程序时,我得到了:
FROM python:3.8-alpine as build
COPY src/ /app/src/
COPY Pipfile Pipfile.lock /app/
# for python lxml
RUN apk add --update --no-cache --virtual .build-deps \
g++ \
python3-dev \
libxml2 \
libxml2-dev && \
apk add libxslt-dev && \
apk del .build-deps
RUN pip install pipenv==2020.6.2
WORKDIR /app
ENV PIPENV_VENV_IN_PROJECT 1
RUN pipenv install --deploy
FROM python:3.8-alpine as run
COPY --from=build /app /app/
WORKDIR /app
RUN addgroup -S app && adduser -S -G app app
USER app
CMD .venv/bin/python src/main.py
如果我将其构建为一个阶段,并在第一阶段运行该应用程序,则一切正常,这意味着bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: lxml. Do you need to install a parser library?
软件包在第一阶段已正确构建和安装,但未复制到第二阶段。
如何将我的lxml
包移到第二阶段?
答案 0 :(得分:0)
您可能需要在应用程序的python文件中进行一些更改,而不是libxml2
试试lxml
。官方文档:Installing a parser。Beautiful Soup也支持它。