Як оновити існуюче середовище Conda за допомогою файлу .yml


138

Як можна оновити існуюче середовище conda за допомогою іншого файлу .yml. Це надзвичайно корисно при роботі над проектами, які мають кілька файлів вимог, тобто base.yml, local.yml, production.ymlтощо.

Наприклад, нижче наведено base.ymlфайл із пакетами conda-forge, conda та pip:

base.yml

name: myenv
channels:
  - conda-forge
dependencies:
  - django=1.10.5
  - pip:
    - django-crispy-forms==1.6.1

Фактична середовище створюється з: conda env create -f base.yml.

Пізніше до них потрібно додати додаткові пакети base.yml. Інший файл, скажімо local.yml, повинен імпортувати ці оновлення.

Попередні спроби цього здійснити:

створення local.ymlфайлу з визначенням імпорту:

channels:

dependencies:
  - pip:
    - boto3==1.4.4
imports:
  - requirements/base. 

А потім виконати команду: conda install -f local.yml.

Це не працює. Будь-які думки?


Чи можливо оновити поточно активоване середовище ?? Я просто спробував це, але оновлення перейшло до середовища, названого у файлі yml.
Сьорен

Відповіді:


202

Спробуйте використовувати оновлення conda env :

conda activate myenv
conda env update --file local.yml

Або без необхідності активувати середовище (спасибі @NumesSanguis):

conda env update --name myenv --file local.yml

12
Вам не потрібен знак рівності між -fі file.yml. Видалення знака рівності призведе до завершення роботи вкладки над .ymlім'ям файлу.
BallpointBen

4
Додати, --name env_nameщоб ігнорувати будь-який name: fooтег у local.yml. Також запобігає необхідності спочатку активувати мінв. Повна команда: conda env update --name env_name --file local.yml Від: stackoverflow.com/a/45525593/3399066 «s коментар
NumesSanguis

1
В останній версії conda я думаю, що ми використовуємо "conda activate myenv" замість "source activate myenv"
teter123f

31

Запропонована відповідь частково правильна. Вам потрібно буде додати параметр --prune, щоб також видалити пакунки, вилучені з Environment.yml . Правильна команда:

conda env update -f local.yml --prune

Навіть прапора --Prune недостатньо для усунення встановлених залежностей від піп ...
Жан Пол

Правда. Я думаю, що це усуне залежності від конди, але не ті, які перераховані під pip
блимати

22

Відповідь алкаміду - у правильних рядках, але я виявив, що Conda не вдається встановити нові залежності, якщо середовище вже активне. Дезактивація середовища спочатку вирішує це:

source deactivate;
conda env update -f whatever.yml;
source activate my_environment_name; # Must be AFTER the conda env update line!

4
Як conda знає, яку програму оновити, якщо вона не є активною на даний момент?
Томас Фаускангер

5
@ThomasFauskanger ви можете вказати це явно -n <environment name>, але, за замовчуванням, він, здається, працює з очікуваним середовищем (можливо, останнім часом активним або просто вибором середовища за замовчуванням)
Дейв,

18
@ThomasFauskanger Ім'я середовища вказане у файлі YAML, якщо воно було експортовано conda.
Томас

Я подумав, що давнє питання цього питання полягає в тому, щоб оновити інше середовище до вказаного у файлі yaml.
Джакомо

1
@ThomasFauskanger файл yaml містить назву середовища
Abdulrahman Bres
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.