Bir .yml dosyasıyla mevcut bir Conda ortamı nasıl güncellenir


139

Önceden var olan bir conda ortamı başka bir .yml dosyasıyla nasıl güncellenebilir? Bu, birden çok gereksinim dosyası olan projeler üzerinde çalışırken son derece yararlıdır, örn base.yml, local.yml, production.yml.

Örneğin, aşağıda bir base.yml conda-forge, conda ve pip paketleri içeren dosya :

base.yml

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

Gerçek ortam şunlarla oluşturulur: conda env create -f base.yml .

Daha sonra, ek paketlerin eklenmesi gerekir. base.yml . Diyelim ki başka bir dosyanın local.ymlbu güncellemeleri içe aktarması gerekiyor.

Bunu gerçekleştirmeye yönelik önceki girişimler şunları içerir:

local.ymliçe aktarım tanımlı bir dosya oluşturma :

channels:

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

Ve sonra şu komutu çalıştırın: conda install -f local.yml .

Bu çalışmıyor. Düşüncesi olan var mı?


Şu anda aktif olan ortamı güncellemek mümkün mü? Bunu denedim ama güncelleme yml dosyasında belirtilen ortama gitti.
Sören

Yanıtlar:


203

Conda env güncellemesini kullanmayı deneyin :

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

Veya ortamı etkinleştirmeye gerek kalmadan (teşekkürler @NumesSanguis):

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

12
-fVe arasında eşittir işaretine ihtiyacınız yok file.yml. Eşittir işaretinin kaldırılması, .ymldosya adı üzerinde sekme tamamlamanın çalışmasını sağlayacaktır .
BallpointBen

4
--name env_nameİçindeki herhangi bir name: fooetiketi yok saymak için ekleyin local.yml. Ayrıca önce myenv'i etkinleştirme ihtiyacını da önler. Tam komut: conda env update --name env_name --file local.yml Gönderen: stackoverflow.com/a/45525593/3399066'nın yorumu
NumesSanguis

1
En son conda sürümünde, "kaynak etkinleştir myenv" yerine "conda activ myenv" kullandığımızı düşünüyorum
teter123f

32

Önerilen cevap kısmen doğrudur. Environment.yml'den kaldırılan paketleri de kaldırmak için --prune seçeneğini eklemeniz gerekir . Doğru komut:

conda env update -f local.yml --prune

--Prune bayrağı bile pip yüklü bağımlılıkları kaldırmak için yeterli değil ...
Jean Paul

Doğru. Sanırım conda bağımlılıklarını ortadan kaldıracak, ancak pip altında listelenenleri kaldırmayacak
Blink

22

alkamid'in cevabı doğru satırlarda, ancak Conda'nın ortam zaten aktifse yeni bağımlılıklar kurmakta başarısız olduğunu buldum. Ortamın devre dışı bırakılması önce şunu çözer:

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

4
Conda, şu anda etkin değilse hangi ortamın güncelleneceğini nasıl biliyor?
Thomas Fauskanger

5
@ThomasFauskanger ile açıkça belirtebilirsiniz -n <environment name>, ancak varsayılan olarak beklenen ortamla çalışıyor gibi görünüyor (belki en son etkin olan veya yalnızca varsayılan bir ortam seçimi)
Dave

18
@ThomasFauskanger Conda tarafından dışa aktarılmışsa, ortamın adı YAML dosyasında belirtilir.
Thomas

Bu sorunun eski amacının yaml dosyasında belirtilen farklı bir ortamı güncellemek olduğunu düşündüm.
Giacomo

1
@ThomasFauskanger yaml dosyası ortam adını içerir
Abdulrahman Bres
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.