
fabianemmi/python-poetry包含Python依赖管理工具Poetry的Docker镜像。
在容器内,可像常规命令行工具一样使用Poetry。
为减小镜像大小,建议使用多阶段构建,避免最终容器中包含Poetry。以下示例展示了如何在构建阶段将包安装到虚拟环境中,然后复制到运行阶段,以达到最小镜像大小。
Dockerfile# 允许传递Python和Poetry版本到构建过程 ARG PYTHON_VERSION="3.11" ARG POETRY_VERSION="1.2.2" # 构建阶段 FROM fabianemmi/python-poetry:${PYTHON_VERSION}-${POETRY_VERSION}-slim as builder # 复制包:理想情况下仅复制.py文件、poetry.lock和pyproject.toml ADD <package> /opt/<package> COPY poetry.lock pyproject.toml /opt/ WORKDIR /opt # 使用Poetry安装 RUN python -m venv /venv && \ . /venv/bin/activate && \ pip install --upgrade pip && \ poetry build && \ pip install /opt/dist/*.whl # 删除Python缓存文件 RUN find . | grep -E "(__pycache__|\.pyc|\.pyo$)" | xargs rm -rf && \ cd /venv && \ find . | grep -E "(__pycache__|\.pyc|\.pyo$)" | xargs rm -r # 运行阶段 FROM python:${PYTHON_VERSION}-alpine # 复制所需文件:虚拟环境 COPY --from=builder /venv /venv # 将venv添加到PATH变量,使已安装的包可用 ENV PATH=/venv/bin:$PATH
注意:
builder阶段复制/app/<package>。仅当需要执行项目的源代码文件时才需此操作。. /venv/bin/activate,可通过在最后阶段使用以下命令使其冗余:
DockerfileENV PATH=/venv/bin:$PATH
Docker容器内无需创建虚拟环境,因此已默认关闭(POETRY_VIRTUALENVS_CREATE=false)。
要在CI作业中正确缓存依赖项,需在流水线中启用虚拟环境创建。以下是GitLab Pipelines的示例:
yamlvariables: POETRY_CACHE_DIR: ${CI_PROJECT_DIR}/.venv PIP_CACHE_DIR: ${CI_PROJECT_DIR}/.cache/pip .poetry-cache: &poetry-cache cache: paths: - $POETRY_CACHE_DIR - $PIP_CACHE_DIR key: files: - poetry.lock - .gitlab-ci.yml prefix: ${CI_COMMIT_REF_SLUG}-${CI_JOB_NAME} .python-poetry: &python-poetry <<: *poetry-cache variables: POETRY_CACHE_DIR: ${POETRY_CACHE_DIR} image: fabianemmi/python-poetry:latest ... example job: <<: *python-poetry before_script: - export POETRY_VIRTUALENVS_CREATE=true - poetry config virtualenvs.in-project true - poetry install ... ...
本仓库由GitLab管理。欢迎提交合并请求。





manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务