Если ваш контейнер Docker относительно долговечен или меняются зависимости проекта, по-прежнему стоит использовать виртуальную среду Python. Помимо (относительно) выделения зависимостей кодовой базы от других проектов и базовой системы (и, в частности, проекта в данном состоянии), она позволяет определить определенную меру, определяющую состояние требований в данный момент времени.
Например, скажем, что вы делаете образ Docker для своего приложения Django сегодня и в конечном итоге используете его в течение следующих трех недель. Считаете ли вы, что ваш файл requirements.txt
изменяется между ними сейчас? Можете ли вы представить себе сценарий, в котором вы публикуете горячую ссылку с изменениями окружающей среды?
По состоянию на Python 3.3, виртуальный окр является STDLIB, что означает, что очень дешево использовать, так что я бы продолжать использовать его, только в случае, если контейнер Docker не так располагаемый, как вы изначально планировали. Иными словами, даже если ваш конвейер Docker-image достаточно зрелый, и версия Python и зависимостей «предварительно испечена», это такие плохие плоды, которые явно не нужны, стоит придерживаться лучших практик.
Каким образом виртуальный менеджер помогает мне в изменении зависимостей больше, чем в отсутствии? – johnharris85
Обеспечивая хорошую изоляцию и декларативное управление зависимостями. Если вы сделаете новый образ Docker для каждого изменения зависимости (например, some_dependency 0.1-> 0.2 или, что более важно, с удалением пакета), и убедитесь, что путь вашего Python вашего скрипта будет следовать только по вашим пути. Но это не так, как я это делаю на практике, и virtualenv упрощает эти небольшие гарантии. Я имею в виду, можно просто пропустить Docker и использовать LXC, но мы говорим в оттенках удобства. –
virtualenv - это отделить разрозненные приложения. Если каждый контейнер для докеров - вещь, в виртуальном праве нет смысла? то есть. MyDjangoApp никогда не понадобится изолированное дерево зависимостей внутри контейнера MyDjangoApp. –