не скажу за питон, но в целом проводятся атаки на пакетные менеджеры, например, на npm.
вообще, я думаю, тут скорее не от MITM защита, а именно от скачивания иной версии пакета, нежели та, на которой проводилось тестирование(например, если мэйнтейнер перезалил пакет не поменяв версию), но в целом наличие такой валидации лучше, чем ее отсутствие.
да понятно, просто в случае с pipenv все эти команды выполняются оболочкой за разработчика — это удобно(одна команда вместо 2) и более безопасно(про pip freeze можно, например, попросту забыть).
такая сборка имела смысл в доисторические времена, когда еще не было wheel, а пакеты под windows распространялись в виде exe и ставить в virtualenv их было невозможно.
pip freeze не делает фиксации версий, он просто показывает версии пакетов, установленных в данном окружении.
там могут быть указаны системные пакеты, если, например, окружение собрано с флагом --system-site-packages, что в общем случае нежелательно и создает дополнительную головную боль. pipenv решает эту проблему в полуавтоматическом режиме.
в моем случае в requirements.txt был указан только aiohttp, который по зависимостям подтянул обратно несовместимую версию yarl.
в случае с pipenv при выполнении команды
pipenv install aiohttp==2
генерируется Pipfile.lock, в котором прописан aiohttp == 2.0.5, yarl == 0.9.3(версии указаны для примера). На этой установке прогоняются тесты и в production пойдут именно эти версии пакетов.
в случае с обычными requirements.txt после установки каждого пакета надо руками запускать freeze и, возможно, очищать его от каких-то локальных пакетов.
как это работает в conda с его environment.yml я не смог найти, буду признателен за ссылку.
Основное отличие pipenv — это наличие файла Pipfile.lock, содержащего список версий всех пакетов, установленных в этом окружении, с их зависимостями + md5 сумма файла пакета.
Это дает воспроизводимость сборки. Например, нет проблемы, когда вы протестировали свой код на CI 2 дня назад, а во время раскатки на production приехала обновленная версия какой-то из зависимостей, несовместимая с вашим кодом(несколько раз натыкался на такое в связке aiohttp — yarl).
Наличие же md5 дает некоторую защиту от атаки MITM и внедрения вредоносного кода при установке на другое окружение.
не скажу за питон, но в целом проводятся атаки на пакетные менеджеры, например, на npm.
вообще, я думаю, тут скорее не от MITM защита, а именно от скачивания иной версии пакета, нежели та, на которой проводилось тестирование(например, если мэйнтейнер перезалил пакет не поменяв версию), но в целом наличие такой валидации лучше, чем ее отсутствие.
да понятно, просто в случае с pipenv все эти команды выполняются оболочкой за разработчика — это удобно(одна команда вместо 2) и более безопасно(про pip freeze можно, например, попросту забыть).
такая сборка имела смысл в доисторические времена, когда еще не было wheel, а пакеты под windows распространялись в виде exe и ставить в virtualenv их было невозможно.
pip freeze
не делает фиксации версий, он просто показывает версии пакетов, установленных в данном окружении.там могут быть указаны системные пакеты, если, например, окружение собрано с флагом
--system-site-packages
, что в общем случае нежелательно и создает дополнительную головную боль.pipenv
решает эту проблему в полуавтоматическом режиме.в моем случае в
requirements.txt
был указан толькоaiohttp
, который по зависимостям подтянул обратно несовместимую версиюyarl
.в случае с pipenv при выполнении команды
генерируется Pipfile.lock, в котором прописан
aiohttp == 2.0.5
,yarl == 0.9.3
(версии указаны для примера). На этой установке прогоняются тесты и в production пойдут именно эти версии пакетов.в случае с обычными
requirements.txt
после установки каждого пакета надо руками запускатьfreeze
и, возможно, очищать его от каких-то локальных пакетов.как это работает в
conda
с егоenvironment.yml
я не смог найти, буду признателен за ссылку.Это дает воспроизводимость сборки. Например, нет проблемы, когда вы протестировали свой код на CI 2 дня назад, а во время раскатки на production приехала обновленная версия какой-то из зависимостей, несовместимая с вашим кодом(несколько раз натыкался на такое в связке aiohttp — yarl).
Наличие же md5 дает некоторую защиту от атаки MITM и внедрения вредоносного кода при установке на другое окружение.