Как я могу обновить pip внутри venv внутри Dockerfile? - PullRequest
0 голосов
/ 07 сентября 2018

во время работы

$ 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

исключить сообщение «Вы используете версию 10.0.1, ...».

Ответы [ 3 ]

0 голосов
/ 09 сентября 2018

После создания виртуальной среды в контейнере 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
0 голосов
/ 10 сентября 2018

Самый простой ответ на этот вопрос - просто не беспокоиться о виртуальной среде в образе 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 под капотом и запускает новую оболочку в новом контейнере; ссылка 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
0 голосов
/ 07 сентября 2018

Прежде чем вы сможете использовать свою виртуальную среду venv, вам необходимо активировать ее с помощью

В Windows:

venv\Scripts\activate.bat

В Unix или MacOS запустите:

source venv/bin/activate

Обратите внимание, что venv - это имя вашей среды. Вы создали эту среду с RUN python -m venv venv. Я настоятельно рекомендую использовать другое имя.

Затем вы можете обновить с python -m pip install --upgrade pip

...