繁体   English   中英

在Docker中安装和使用pip和virtualenv

[英]Install and using pip and virtualenv in Docker

我想在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:没找到,就在这里

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

在基于Debian的平台上,包括Ubuntu, python3-pip安装的命令叫做pip3 ,以便与任何系统安装的Python 2及其pip和平共存。

有点类似, virtualenv命令不是由包python3-virtualenv安装的; 为此, 你需要apt-get install -y virtualenv

请注意, venv包含在Python 3标准库中,因此您根本不需要安装任何东西。

python3 -m venv newenv

你为什么要在Docker里面想要一个virtualenv呢? (在某些情况下它是有意义的,但在绝大多数情况下,您希望Docker容器尽可能简单,这意味着,以root身份安装所有内容,并在需要更新某些内容时重建整个容器。)

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

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

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

在容器内使用虚拟环境有什么意义? 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解释器并检查它是否从venv运行:

>>> import sys
>>> sys.executable

它应该打印/venv/bin/python

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

此外,你最好尝试为docker准备好python-images ,例如浅色高山图像,而不是扩展基本的ubuntu图像。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM