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