Сохраняя то же самое, общие virtualenvs при переключении с pyenv-virtualenv на pipenv - PullRequest
1 голос
/ 28 апреля 2019

Я начал смотреть на pipenv, и это кажется довольно хорошим. Единственное, что меня беспокоит, это то, что в большинстве моих проектов задействованы numpy, scipy и некоторые другие не такие маленькие библиотеки.

Текущий способ управления моими проектами: У меня установлены pyenv и pyenv-virtualenv. У меня есть несколько (в настоящее время 4) конкретных virtualenvs, которые каждый обслуживает тип проекта. Сами проекты имеют .pyenv-version, у меня включена функция автозагрузки virtualenv pyenv. Если мне нужно поделиться проектом, я генерирую requirements.txt с pip freeze -l из virtualenv.

Итак, в моей текущей настройке у меня есть X количество проектов и Y, Y << X количество virtualenvs, все из которых составляют несколько ГБ на жестком диске. Обратите внимание, что из-за больших библиотек, таких как numpy, каждая из virtualenvs довольно большая, около 700-900 МБ.

Мой вопрос:

Насколько я понимаю, pipenv по умолчанию создаст virtualenv для всех моих проектов, поэтому пространство на жестком диске, занимаемое моим virtualenvs, значительно увеличится. То, что меня интересует, это:

  • возможно ли совместно использовать pipenv среды в нескольких проектах, которые используют точно одинаковые зависимости? то есть несколько pipenv конфигов, которые загружают один и тот же virtualenv?
  • если нет, возможно ли создать pipenv конфигурационные файлы из virtualenv, который я настроил с pyenv? то есть я бы не использовал pipenv для фактического запуска своих проектов, я бы не создавал virtualenvs с pipenv, но я бы создал pipenv конфигурационные файлы для совместного использования проекта (в этом случае, вероятно, рядом с requirements.txt)

редактировать : Я переписал большую часть вопроса, чтобы сделать его более понятным.

1 Ответ

1 голос
/ 28 апреля 2019

pipenv не подходит для вашего конкретного рабочего процесса, поскольку он ориентирован на проект, а не на среду. pipenv рассматривает виртуальную среду как изменчивую и оставляет за собой право наизмените это свободно, если обстоятельства требуют этого. Вы можете использовать его, но в случае изменений в вашей среде будет трудно поддерживать синхронизацию всех проектов из-за более строгой строгости pipenv.

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

Однако pipenv, в отличие от virtualenv, проверяет и обеспечивает, что виртуальная среда имеет точный набор модулей, удовлетворяющих условиям в Pipfile, и точную "последнюю протестированную конфигурацию"указанный в сгенерированном Pipfile.lock.

Итак, если вы изменяете какую-либо версию пакета в среде, вам необходимо:

  • обновить все Pipfile.lock s в затронутых проектах (например, скопируйте измененный).Сгенерированный Pipfile, вы можете вместо этого удалить их.
  • обновить все Pipfile в затронутых проектах до новых версий пакета (например, скопировать измененную), если произошло изменение
...