При установке пакетов 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
.Это связано с тем, что контейнер запускается каждый раз из его образа .
Чтобы пакет оставался установленным, его необходимо включить в образ.
AПроект Divio содержит файл requirements.in
, в котором перечислены пакеты Python, которые будут включены в образ.
Добавьте новую строку, содержащую rsa
, в конец этого файла.Затем выполните:
docker-compose build web
Это восстановит образ Docker.В следующий раз, когда вы запустите контейнер с (например) docker-compose run --rm web bash
, он будет включать этот пакет Python.
( Руководство разработчика Divio содержит некоторые дополнительные рекомендации по использованию pip .)
Примечание: я являюсь членом команды Divio.Этот вопрос мы регулярно видим через наши каналы поддержки.