Как я могу использовать pip для установки пакетов Python в мой проект Divio Docker? - PullRequest
0 голосов
/ 11 октября 2018

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

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

1 Ответ

0 голосов
/ 11 октября 2018

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

...