Зачем вам создавать файл requirements.txt в виртуальной среде на Python?

Я скачал проект Python, и он содержит как виртуальную среду, так и файл requirements.txt. Зачем вам оба? Насколько я знаю, виртуальные среды уже содержат необходимые модули. Есть идеи, когда и почему эта комбинация будет полезна?


person Engo    schedule 29.06.2017    source источник
comment
Отдельный venv не будет содержать модули для вас, он должен использовать список требований и обычно читает его из requirements.txt.   -  person idjaw    schedule 29.06.2017
comment
@idjaw Я думаю, что их указанный проект содержит виртуальную среду со всеми установленными модулями.   -  person Moses Koledoye    schedule 29.06.2017
comment
Эта комбинация никогда не будет полезной. На самом деле хранить venv в репо — не лучшая идея. Это потому, что venv и установленные пакеты зависят от базовой ОС. При этом проект должен быть максимально независимым от ОС.   -  person freakish    schedule 29.06.2017
comment
@MosesKoledoye Верно. Тогда нужно объяснить, что это не хорошая идея, и вместо этого установить среду, а не просто перенести venv.   -  person idjaw    schedule 29.06.2017
comment
@idjaw Да, верно. @ freakish уже предоставляет указатель. Они найдут это полезным: stackoverflow.com/questions/6590688/   -  person Moses Koledoye    schedule 29.06.2017
comment
@freakish Объясните это как ответ, чтобы помочь решить этот вопрос. Я думаю, что в этом случае было бы полезно просто иметь его как один, чтобы закрыть его.   -  person idjaw    schedule 29.06.2017


Ответы (2)


Хотя это технически возможно, я не нахожу для этого веских причин. Наличие обоих сбивает с толку, потому что неясно, какой из них является «хозяином». И вы должны (или нет?) беспокоиться о согласованности между установленными пакетами и файлом requirements.txt.

Также venv и установленные пакеты во многих случаях зависят от базовой ОС, у них есть бинарники, разная компоновка и т. д. Обычно рекомендуется писать независимый от ОС код.

В общем, я бы придерживался файла requirements.txt и удалял любую папку venv из репозитория проекта.

person freakish    schedule 29.06.2017
comment
Это именно то, что случилось со мной. Меня это смутило :) Отличное объяснение, спасибо! - person Engo; 29.06.2017
comment
Дополнительный вопрос: вы предпочитаете хранить папки venv в папке разработки проекта Python или в другой папке? - person Engo; 29.06.2017
comment
@Engo Я лично использую virtualenvwrapper, который по умолчанию устанавливает каждый venv в ~/.virtualenvs. Работает как шарм. - person freakish; 29.06.2017

Вы не можете распространять каталог virtualenv со своим проектом, потому что его содержимое может различаться в зависимости от целевой операционной системы и версии операционной системы. В частности, виртуальная среда, включающая библиотеки со скомпилированными компонентами, установленными в Ubuntu 14.04, будет отличаться от эквивалентной виртуальной среды, установленной в Ubuntu 16.04.

Вместо этого вы должны распространять свой файл requirements.txt (просто соглашение, вы можете использовать любое имя файла, которое хотите), чтобы конечный пользователь мог воссоздать виртуальную среду на своей машине.

person bakatrouble    schedule 29.06.2017
comment
Почему плохо предоставлять виртуальную среду, включающую все необходимые модули? это мне непонятно... - person Engo; 29.06.2017
comment
Virtualenvs в разных системах имеют разные макеты и могут содержать скомпилированные двоичные файлы, которые просто не запустятся на другом компьютере. - person bakatrouble; 29.06.2017