如何在Dockerfile中的venv中升级pip?

问题描述 投票:1回答:3

在跑步的时候

$ 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 .."

我宁愿屈服并且确实升级。

所以我在pip upgrade中添加DockerFile命令,在venv建成之后,因为重要的pip是venv内部的那个(我能做到这一点吗?)。所以我的Dockerfile现在有这个:

...
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,...”消息。

python pip dockerfile python-venv
3个回答
2
投票

对此最简单的答案就是不要在Docker镜像中使用虚拟环境。虚拟环境为您提供了一个独立的文件系统空间,其中包含一组不与系统安装冲突的私有Python包,但Docker映像也是如此。你可以在Docker镜像中使用系统点,这样就可以了。

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 reference对此进行了一些描述。)

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

1
投票

在使用虚拟环境之前,venvyou需要激活它

在Windows上:

venv\Scripts\activate.bat

在Unix或MacOS上,运行:

source venv/bin/activate

请注意,venv是您环境的名称。您使用RUN python -m venv venv创建了此环境。我强烈建议使用其他名称。

然后你可以用python -m pip install --upgrade pip升级


0
投票

通过Docker容器创建虚拟环境后

RUN python -m venv venv

然后运行

RUN venv/bin/pip install --upgrade pip

要么

RUN venv/bin/python -m pip install --upgrade pip

但都没有

RUN pip install --upgrade pip

也不

RUN python -m pip install --upgrade pip
© www.soinside.com 2019 - 2024. All rights reserved.