Копирование базовой среды для создания новой среды в Python - PullRequest
0 голосов
/ 17 октября 2018

Я работаю с некоторыми новыми библиотеками и боюсь, что в будущем мой сценарий может показать некоторые проблемы с неожиданными обновлениями пакетов.Поэтому я хочу создать новую среду, но не хочу вручную устанавливать все базовые пакеты, такие как numpy, pandas и т. Д. Итак, имеет ли смысл создавать новую среду с использованием conda, которая является точной копией моей базовой средыили это может создать какой-то конфликт?

1 Ответ

0 голосов
/ 19 октября 2018

Копирование с использованием conda работает, но если вы использовали только virtualenv, вы должны вручную создать файл require.txt, создать новую виртуальную среду, активировать ее, а затем просто использовать pip install -r requirements.txt.Обратите внимание на ключевое слово - manually.

Например, если вам нужны requests, numpy и панды, ваш requirements.txt будет выглядеть так:

requests==2.20.0
numpy==1.15.2
pandas==0.23.4

Вы можетена самом деле исключите numpy в этом случае, но вы по-прежнему сохраняете его так, как вы его используете, и если вы удалили панд, он все равно понадобится.Я создаю его, устанавливая новый пакет, а затем использую pip freeze, чтобы найти модуль, который я только что установил, и помещаю его в файл needs.txt с текущей версией.Конечно, если я когда-нибудь доберусь до состояния, в котором я им поделюсь, я заменю == на >=, в большинстве случаев этого достаточно, если он конфликтует, вам нужно проверить, что требует конфликтующая библиотека, и настроитьесли возможно, например, вы указали в качестве требования последнюю версию numpy, но более старой библиотеке нужна именно версия xyz, и ваша библиотека тоже отлично подходит для этой версии (идеальный случай).

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

Теперь этопочему вы должны построить его вручную:

$ pip freeze
certifi==2018.10.15
chardet==3.0.4
idna==2.7
numpy==1.15.2
pandas==0.23.4
python-dateutil==2.7.3
pytz==2018.5
requests==2.20.0
six==1.11.0
urllib3==1.24
virtualenv==16.0.0

six?pytz? Что? Другие библиотеки используют их, но мы даже не знаем, для чего они нужны, если не будем искать их, и они не должны быть перечислены как зависимости проекта, они будут установлены, если они зависят от этого.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...