在Docker中安装和使用pip和virtualenv

时间:2018-04-08 08:24:21

标签: python docker pip dockerfile

我想在Docker容器中安装Python,Pip和virtualenv,这是Ubuntu,我通过Dockerfile创建图像:

FROM ubuntu:16.04

RUN apt-get update -y

RUN apt-get

RUN apt-get python3 -y

RUN apt-get install python3-pip -y

RUN pip install virtualenv
...

当它到了这里时,它出现了“/ bin / sh:1:pip:not found”,但是在安装过程中没有显示异常,这是不是意味着我没有安装pip吧?或者在使用pip命令之前我应该​​做什么?

然后我像这样更改了Dockerfile:

...
RUN apt-get python3 -y

RUN apt-get install python3-pip -y

RUN apt-get install python3-virtualenv -y 

RUN virtualenv --no-stie-packages -p /path/python3 py3env
...

但仍然说/ bin / sh:1:virtualenv:找不到,here is it

我也安装了git,git clone命令运行正常,可以使用。我哪里错了,或者我该怎么做?

2 个答案:

答案 0 :(得分:4)

在基于Debian的平台上,包括Ubuntu,the command installed by python3-pip is called pip3,以便它与任何系统安装的Python 2及其pip和平共存。

有点类似,程序包virtualenv未安装python3-virtualenv命令;得到它,you need apt-get install -y virtualenv.

请注意,{3}标准库中包含venv,因此您根本不需要安装任何内容。

python3 -m venv newenv

为什么你想要在Docker中使用virtualenv呢? ( 的情况下它是有意义的,但在绝大多数情况下,你希望Docker容器尽可能简单,这意味着,以root身份安装所有东西,并重建整个容器,如果有的话需要更新。)

顺便说一句,您通常希望最小化RUN语句的数量。在调试时创建多个层可能是可以防御的,但是什么都不做的层肯定是浪费。也许还发现apt-get可以一次安装多个包。

RUN apt-get update -y && \
    apt-get install -y python3 python3-pip && \
    ...

&&只要其中一个命令失败,整个RUN序列就会失败。

答案 1 :(得分:2)

在容器内使用虚拟环境有什么意义? Virtualenv对本地开发非常有用,它允许您在一台机器上使用不同版本的python解释器和包。但是在您的docker容器中应该只有一个进程(实际上是容器,它是进程),并且您可以在全局安装所有需求。

但如果你真的有充分的理由,你可能必须使用“python3 way”来创建虚拟环境。

所以你的Dockerfile看起来应该是这样的:

FROM ubuntu:16.04
RUN apt-get update -y \
    && apt install python3 -y \
    && apt install python3-pip -y \
    && apt install python3-venv -y \
    && python3 -m venv venv
ENTRYPOINT bin/bash

您可以使用命令

构建它
docker build -t ubuntu-python .

运行
docker run --rm -it ubuntu-python

在容器shell中,您可以使用命令

激活venv
source venv/bin/activate

然后运行python interpreter并检查它是否从venv运行:

>>> import sys
>>> sys.executable

它应该打印/venv/bin/python

我不知道如何使用预激活运行容器(我不知道这个词真的存在)虚拟环境我仍然认为你实际上不需要在你的虚拟环境中使用虚拟环境容器

另外,您最好为docker做好准备python-images,例如轻微的高山图像,而不是扩展基本的ubuntu图像。

请原谅我可怕的俄语 - 英语,我希望你能理解我的答案:)