python - 如何在 Dockerfile 中的 venv 中升级 pip?
问题描述
在跑步的时候
$ sudo docker build -t myproj:tag 。
我被消息击中
You are using pip version 10.0.1, however version 18.0 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
并考虑到最近偶尔会出现错误的微妙之处:
"/usr/bin/pip" "from pip import main" "ImportError: cannot import .."
我宁愿屈服并确实升级。
因此,我在 venv 构建后pip upgrade
添加了命令DockerFile
,因为重要的是 venv 内部的命令(我说对了吗?)。所以我的 Dockerfile 现在有这个:pip
...
RUN python -m venv venv
RUN pip install --upgrade pip
...
但这样做并不能避免“您正在使用 pip 10.x”消息。我错过了什么?
更新
虽然是一个有希望的建议,但
RUN source venv/bin/activate
RUN pip install --upgrade pip
也不
RUN source venv/bin/activate
RUN python -m pip install --upgrade pip
消除“您正在使用 pip 版本 10.0.1,...”消息。
解决方案
对此最简单的答案就是不要打扰 Docker 映像中的虚拟环境。虚拟环境为您提供了一个隔离的文件系统空间,其中包含一组与系统安装不冲突的私有 Python 包,但 Docker 映像也是如此。你可以在 Docker 镜像中使用系统 pip 就可以了。
FROM python:3.7
RUN pip install --upgrade pip
WORKDIR /usr/src/app
COPY . .
RUN pip install .
CMD ["myscript"]
如果你真的想要一个虚拟环境,你要么需要专门从虚拟环境的路径运行包装脚本
RUN python -m venv venv
RUN venv/bin/pip install --upgrade pip
或在每个RUN 命令上运行虚拟环境“激活”脚本;它设置的环境变量不会从一个步骤延续到另一个步骤。(实际上,每个 RUN 命令在后台执行其自己的docker run; docker commit
序列,并将在新容器中启动一个新 shell;Dockerfile 参考对此进行了一些描述。)
RUN python -m venv venv
RUN . venv/bin/activate \
&& pip install --upgrade pip
COPY . .
RUN . venv/bin/activate \
&& pip install .
CMD ["venv/bin/myscript"]
尝试在其自己的 RUN 指令中激活虚拟环境除了生成一个无操作层之外没有任何作用。
# This step does nothing
RUN . venv/bin/activate
# And therefore this upgrades the system pip
RUN pip install --upgrade pip
推荐阅读
- java - 用户输入后无法返回上一个语句
- wolfram-mathematica - 为什么我会收到错误:Set::write: Tag Times in Null w is Protected
- gemfire - 使用 PCC 创建动态 GemFire 区域
- python - cassie机器人强化学习控制的分段错误(核心转储)
- javascript - 使用 - moment JS 和 Angular 获取特定年份的月份中的天数
- python - selenium.common.exceptions.WebDriverException:消息:无效参数:无法终止退出的进程 [NOT A DUPLICATE]
- android - 如何检查实时数据库中的值(开/关)
- algorithm - 合并 k 排序数组 - 优先队列与传统合并排序合并,何时使用哪个?
- sinch - 如何在对 PSTN 的 Javascript Sinch SDK 调用中接收脉冲
- database - 恢复数据库而不转储但文件 --> /var/lib/mysql