簡體   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