Как я могу использовать pip для установки пакетов Python в мой проект Divio Docker?

1

Я привык использовать pip для установки пакетов Python в виртуальные среды проектов Django.

Когда я работаю с проектом Divio Docker локально, это не сработает.

Теги:
docker
pip
divio

1 ответ

1

Есть две вещи, о которых вам нужно знать при установке пакетов Python в проект Docker:

  • пакет должен быть установлен в правильной среде
  • если вы хотите использовать установленный пакет в будущем, его необходимо установить более постоянным образом

В приведенных ниже подробностях описывается использование проекта Divio, но принцип будет аналогичным для других установок Docker.

Установка в правильной среде

Чтобы использовать pip в командной строке для установки пакета Python в проект Dockerised, вам нужно использовать pip внутри среды Docker, то есть внутри контейнера.

Недостаточно быть в каталоге, где у вас есть доступ к файлам проекта. В этом отношении он похож на использование виртуальной среды - вам нужно активировать virtualenv. (В противном случае ваш пакет будет установлен не в виртуальной среде, а в собственной среде хоста).

Чтобы активировать виртуальную среду, вы должны запустить что-то вроде source bin/activate на нем.

Чтобы установить пакет в web контейнер Divio:

# start a bash prompt inside the project
docker-compose run --rm web bash

# install the package in the usual way
pip install rsa

rsa теперь установлена и доступна для использования.

Более постоянная установка

Однако, однако, пакет будет установлен и доступен только в этом конкретном контейнере. Как только вы выйдете из оболочки bash, контейнер исчезнет. В следующий раз, когда вы запустите web контейнер, вы не найдете там пакет rsa. Это потому, что контейнер запускается каждый раз из его изображения.

Чтобы пакет оставался установленным, вам нужно будет включить его в изображение.

Проект Divio включает файл requirements.in перечислением пакетов Python, которые будут включены в образ.

Добавьте новую строку, содержащую rsa в конец этого файла. Затем выполните:

docker-compose build web

Это приведет к восстановлению изображения Docker. В следующий раз, когда вы запустите контейнер с (например) с помощью docker-compose run --rm web bash, он будет включать этот пакет Python.

Руководстве разработчика Divio есть дополнительные рекомендации по использованию pip.)

Примечание. Я являюсь членом команды Divio. Этот вопрос тот, который мы видим довольно регулярно через наши каналы поддержки.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню