它继续使用缓存,而新版本可用
It keeps using the cache whereas a new version in available
Dockerfile 包含:
RUN /bin/bash -c "python3 -m pip install --upgrade pip && python3 -m pip install conan"
一旦构建,它就再也不会 运行 而是使用缓存。只要版本(pip's + conan's)没变我就没问题。
处理这种情况的最佳做法是什么?我想docker/buildah
检测如果有新版本是否需要换层。我特意没有添加任何版本以始终获取最新版本。
我很难找到我遇到的错误的原因,Conan 已经在新版本中更改了他们的 SSL 证书,而我被困在阻止我安装软件包的旧版本中。
这个冲突正是使用 版本锁定文件 的原因,它列出了要使用的包的特定版本。即使您认为您通常需要最新版本,这也为您(或打包工具)提供了一个地方来记录一组您知道有效的特定版本。
使用Python的基础setuptools system, for example, you can declare in your setup.cfg
file that your application needs that specific package
[options]
install_requires=
conan
现在在你的本地(非Docker)开发环境中,你可以安装那个
rm -rf venv # clean up the old virtual environment
python3 -m venv venv # create a new virtual environment
. venv/bin/activate # activate it
pip install -e . # install current directory and its dependencies
或者,如果您已经设置了虚拟环境
pip install --upgrade -e .
现在你可以要求pip
转储需求文件
pip freeze > requirements.txt
在您的 Docker 文件中,COPY
新的 requirements.txt
文件,并使用它来安装软件包。
FROM python:3.9
# Upgrade pip, since it likes to complain about being out of date
RUN pip install --upgrade pip
# Install package dependencies
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
# Install the rest of the application
COPY . .
CMD ["./application.py"]
Docker的层缓存系统意味着,如果requirements.txt
文件发生变化,Docker将重新运行pip install
,如果它没有,它将跳过它(直到下一个 COPY
行有一个更改的文件)。同时,您可以控制要使用的确切版本(您可以在 setup.cfg
中放置版本约束或手动编辑 requirements.txt
以避免版本损坏),因此上游的重大更改并不意味着您可以'船代码。最后,您在开发环境和 Docker 中使用相同的打包系统,因此很容易保持一致(我通常不鼓励 pip install
在 Docker 中单独打包文件)。
Dockerfile 包含:
RUN /bin/bash -c "python3 -m pip install --upgrade pip && python3 -m pip install conan"
一旦构建,它就再也不会 运行 而是使用缓存。只要版本(pip's + conan's)没变我就没问题。
处理这种情况的最佳做法是什么?我想docker/buildah
检测如果有新版本是否需要换层。我特意没有添加任何版本以始终获取最新版本。
我很难找到我遇到的错误的原因,Conan 已经在新版本中更改了他们的 SSL 证书,而我被困在阻止我安装软件包的旧版本中。
这个冲突正是使用 版本锁定文件 的原因,它列出了要使用的包的特定版本。即使您认为您通常需要最新版本,这也为您(或打包工具)提供了一个地方来记录一组您知道有效的特定版本。
使用Python的基础setuptools system, for example, you can declare in your setup.cfg
file that your application needs that specific package
[options]
install_requires=
conan
现在在你的本地(非Docker)开发环境中,你可以安装那个
rm -rf venv # clean up the old virtual environment
python3 -m venv venv # create a new virtual environment
. venv/bin/activate # activate it
pip install -e . # install current directory and its dependencies
或者,如果您已经设置了虚拟环境
pip install --upgrade -e .
现在你可以要求pip
转储需求文件
pip freeze > requirements.txt
在您的 Docker 文件中,COPY
新的 requirements.txt
文件,并使用它来安装软件包。
FROM python:3.9
# Upgrade pip, since it likes to complain about being out of date
RUN pip install --upgrade pip
# Install package dependencies
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
# Install the rest of the application
COPY . .
CMD ["./application.py"]
Docker的层缓存系统意味着,如果requirements.txt
文件发生变化,Docker将重新运行pip install
,如果它没有,它将跳过它(直到下一个 COPY
行有一个更改的文件)。同时,您可以控制要使用的确切版本(您可以在 setup.cfg
中放置版本约束或手动编辑 requirements.txt
以避免版本损坏),因此上游的重大更改并不意味着您可以'船代码。最后,您在开发环境和 Docker 中使用相同的打包系统,因此很容易保持一致(我通常不鼓励 pip install
在 Docker 中单独打包文件)。