Почему я не должен помещать файлы моего проекта в папку venv?
Самый распространенный ответ на этот вопрос Где я могу разместить свои файлы python в папке venv? говорит, что вы не должны помещать свои собственные файлы в каталог venv.
Самый сильный аргумент - просто не путать ваши собственные файлы с чужими файлами, что довольно странно, потому что в общем случае разработчики включают много посторонних файлов или кода или библиотек, чтобы не изобретать колесо. Так что я думаю, что это не очень хороший момент.
Другой аргумент
Он предоставляет изолированную среду, в которой вы можете скачать другую версию пакетов Python и запустить ее для своего проекта. Следовательно, не кладите ничего в вашу виртуальную среду. Держи в чистоте.
Я думаю, что лучше всего поместить ваш код в venv:
- Я создаю свои венвы с
--copies
, так что мой venv-dir физически содержит все, что нужно для запуска моего реального кода проекта. Установка Python не так уж велика. - Venv содержит именно те пакеты (будь то загруженные или самозаписанный общий упакованный код) в точно соответствующей тестовой версии для фактического кода проекта. Который может или не может подходить для другого кода проекта, но это не имеет значения, потому что все просто там / оптимизировано / установлено для этого проекта.
- Весь каталог venv находится под контролем версий, поэтому я мог бы в основном удалить пакет даже через subversion вместо pip.
- Я мог бы даже развернуть весь venv, включая код проекта через svn, на другую машину (если она "достаточно похожа", конечно...) и получить все необходимое в одном месте.
Наконец, главный аргумент: мой код проекта будет работать только в том случае, если загружен определенный venv, потому что общая установка не "знает" установленные пакеты внутри.
Итак: что же такого плохого в source
папка в моей папке venv, если код проекта не может работать без него?
1 ответ
Код , от которого зависит ваш код (кстати, это не обязательно python, многие пакеты на самом деле оборачивают код c и C++) иногда создается по-разному для разных аппаратных средств и операционных систем, после установки пакета это означает, что он был создан для определенного среда выполнения и среда привязаны к типу системы, в которой она была установлена.
если вы хотите "заморозить" состояние зависимостей вашего приложения, рекомендуется использовать файл требований, который легко разрешает разрешение зависимостей. Кроме того, вы можете навязать использование определенных интерпретаторов Python
если вы хотите отправить приложение с уверенностью, что оно будет работать одинаково в разных системах, я предлагаю взглянуть на контейнеры