Подтвердить что ты не робот

Установите только доступные пакеты с помощью "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 попытался установить его из любого места, где он доступен.

4b9b3361

Ответ 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/