Установите только доступные пакеты с помощью "conda install --yes --file requirements.txt" без ошибок
При установке пакетов в файл require.txt с использованием Conda с помощью следующей команды
conda install --yes --file requirements.txt
Если пакет в файле require.txt недоступен, выдается сообщение об ошибке "Нет пакета", например, показанное ниже:
Использование API-сайта Anaconda Cloud https://api.anaconda.org
Fetching package metadata:....
Ошибка: в текущих каналах linux-64 не найдено пакетов: nimfa == 1.2.3
Вы можете найти этот пакет на anaconda.org с помощью
anaconda search -t conda nimfa ==1.2.3
Вместо того, чтобы выдавать ошибку, возможно ли изменить это поведение таким образом, чтобы оно устанавливало все доступные пакеты в needs.txt и выдавало предупреждение для тех, которые недоступны?
Я хотел бы этого, потому что, пакет nimfa, который говорит, что ошибка не доступна, может быть установлен pip. Поэтому, если я могу изменить поведение conda install --yes --file requirements.txt
, чтобы просто выдать предупреждение для недоступных пакетов, я могу выполнить команду pip install -r requirments.txt
в .travis.yml, чтобы TravisCI попытался установить его из любого места, где он доступен.
Ответы
Ответ 1
В итоге я просто перебрал строки файла
$ while read requirement; do conda install --yes $requirement; done < requirements.txt
Изменение: Если вы хотите установить пакет с помощью pip, если он не доступен через conda, попробуйте:
$ while read requirement; do conda install --yes $requirement || pip install $requirement; done < requirements.txt
Изменение: Если вы используете Windows (кредит переходит к @Clay):
$ FOR/F "delims=~" %f in (requirements.txt) DO conda install --yes "%f" || pip install "%f"
Ответ 2
Вы можете сделать это, как указано в этом
Экспорт в файл .yml
conda env export > freeze.yml
Воспроизвести:
conda env create -f freeze.yml
Ответ 3
Для тех, кто ищет, я использовал это как решение @TillHoffmann для рыбных раковин:
$ while read requirement; conda install --yes $requirement; end < requirements.txt
А также
$ while read requirement; conda install --yes $requirement;or pip install $requirement; end < requirements.txt
Ответ 4
Ответ Pbms здесь - правильный способ сделать это, предполагая, что у вас есть существующая среда для копирования. Conda полностью способна устанавливать как пакеты Conda, так и пакеты pip, как указано в environment.yml
. Я хотел документировать весь процесс более подробно. Обратите внимание, что я использую среды на основе папок, поэтому я добавил --prefix [path to environment folder]
в большинство команд.
Допустим, вы установили среду для существующего проекта в папку с именем env
в текущей папке, например:
conda create --prefix ./env
Вы должны сгенерировать environment.yml
для этой среды проекта, например:
conda env export --prefix ./env > environment.yml
Вы создали бы новую среду в какой-то другой папке, скопировав туда environment.yml
и затем запустив это оттуда:
conda env create --prefix ./env --file environment.yml
Вы получите уже существующую среду, соответствующую environment.yml
, еще раз скопировав environment.yml
туда и затем запустив ее оттуда:
conda env update --prefix ./env --file environment.yml --prune
Если рассматриваемая среда активна, вы можете проверить состояние ее пакетов следующим образом:
conda list
Это сокращенная версия того, что может печатать эта команда (обратите внимание, что пакеты pip помечены pypi
):
# Name Version Build Channel
pip 19.2.2 py37_0
python 3.7.4 h5263a28_0
numpy 1.16.4 py37h19fb1c0_0
pandas 0.25.1 py37ha925a31_0
pyodbc 4.0.27 py37ha925a31_0
ibm-db 3.0.1 pypi_0 pypi
ibm-db-sa 0.3.5 pypi_0 pypi
Наконец, это сокращенная версия того, как может выглядеть environment.yml
(обратите внимание, что пакеты pip перечислены в их собственной категории):
dependencies:
- pip=19.2.2=py37_0
- python=3.7.4=h5263a28_0
- numpy=1.16.4=py37h19fb1c0_0
- pandas=0.25.1=py37ha925a31_0
- pyodbc=4.0.27=py37ha925a31_0
- pip:
- ibm-db==3.0.1
- ibm-db-sa==0.3.5
Имейте в виду, что совместное использование Conda и pip может вызвать некоторую изжогу, поскольку они могут неосознанно уничтожать зависимости друг от друга. Вы должны сначала установить все свои пакеты Conda, а затем все ваши пакеты pip, а не чередовать их. Если ваша среда нарушается, официальная рекомендация - удалить и воссоздать ее (из вашего файла environment.yml
). Для получения дополнительной информации см. это руководство:
https://www.anaconda.com/using-pip-in-a-conda-environment/