Я requirements.txt
(venv
/pipenv
) тип человека. У меня есть свои причины для этого, но я не буду упоминать эти причины здесь (ну, технически, проблемы, подобные описанной в этом посте, являются одной из этих причин).
В какой-то момент мне, наконец, понадобилось познакомиться с conda
. Первый сюрприз: установка conda
на linux не так проста, как sudo apt-get install ...
или sudo pip install ...
. Вам нужно скачать программу установки на bash и запустить ее. Но меня это вполне устроило. После выбора некоторых опций установки и добавления conda
в PATH
(в руководстве по установке также не было сказано, что это нужно сделать [1][2]) я был готов к работе.
В репозитории проекта, над которым я хотел начать работать, у меня был файл environment.yml
(который является эквивалентом requirements.py
). Теперь наступает самая сложная часть:
В официальной документации сказано:
Создайте окружение из файла environment.yml:
conda env create -f environment.yml
Итак, я выполнил эту команду, но получил следующую ошибку:
CondaValueError: prefix already exists: /home/user/anaconda3
Это прискорбно. В любом случае, я погуглил об этой ошибке, и вот что я нашел:
Ошибка Conda: CondaValueError: префикс уже существует: /home/user/anaconda2
Короче говоря, если ваш файл .yml
имеет пустое поле имени, вы должны явно указать имя окружения при создании окружения командой conda
, вот так:
conda env create -f environment.yml -n environmentName
Я последовал этому совету, и мое окружение было успешно создано.
Подводя итог, скажу, что мой совет, как человека с requiements.txt
, заключается в том, что conda
менее «дружелюбна к пользователю» в том смысле, что вы должны лучше понимать, что происходит, в плане выполнения команд и именования окружений. Сравним это с поведением pipenv
: по умолчанию pipenv
создает каталог с вашим виртуальным окружением в ~/local/share/virtualenvs/
, который состоит из имени каталога, где вы вызываете команду pipenv
, и хэша. Таким образом, начальный уровень ниже, вы просто выполняете команду, и она работает, но затем вы должны знать, где находится среда (вы получаете эту информацию также в выходном журнале pipenv
). Conda, с другой стороны, сложнее в использовании из-за более загадочной информации об ошибках и конвенций, которые нужно знать еще до выполнения команды.