Мне известны 2 предлагаемые практики, которые кажутся противоречащими друг другу:
Храните все, что нужно для вашего проекта в системе контроля версий. При работе с приложениями на C ++ мы проверяем все наши библиотеки в системе контроля версий, чтобы у нового разработчика всегда было все, что ему нужно для создания и запуска проекта, даже если сторонние библиотеки больше не доступны в Интернете.
Используйте virtualenv
с проектами Python, чтобы изолировать проект и его зависимости от обновлений, выполненных до системы Python. Каждая установленная библиотека находится внутри virtualenv, и обычно virtualenvs привязаны к определенному пути (как предлагается в документации), и ожидается, что разработчики сами устанавливают среду, а затем предположительно добавляют любые библиотеки, являющиеся зависимостями.
В идеале я хотел бы иметь возможность устанавливать новые зависимости в virtualenv внутри моего репозитория управления версиями, регистрировать его, и тогда другие разработчики получат правильные зависимости при обновлении, без конфликтов, независимо от того, какие библиотеки их системы Python установил. Но я понимаю, что возникнет проблема с проверкой целого virtualenv в управлении исходным кодом, поскольку разные разработчики могут запускать разные интерпретаторы (в зависимости от их ОС) и могут нуждаться в разных сборках определенных расширений. Возможно, это ограничивает то, как далеко я могу пойти с этим подходом.
Итак, существует ли компромисс, который сводит к минимуму объем ручной установки библиотек, который необходимо выполнить на каждой машине, и который максимально поддерживает контроль версий, чтобы уменьшить риск исчезновения пакетов из Интернета?