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

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

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

1 ответ

При установке пакетов Python в проект Docker необходимо учитывать две вещи:

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

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

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

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

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

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

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

# 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. Этот вопрос мы регулярно видим через наши каналы поддержки.

Другие вопросы по тегам