Hatasız "conda install --yes --file requirements.txt" kullanarak yalnızca mevcut paketleri kurun


96

Conda'yı kullanarak aşağıdaki komutla gereksinimleri.txt'ye paket yüklerken

conda install --yes --file requirements.txt

Requirements.txt dosyasında bir paket yoksa, aşağıda gösterilen gibi bir "Paket yok hatası" atar:

Anaconda Cloud api sitesini kullanma https://api.anaconda.org

Paket meta verileri alınıyor: ....

Hata: Şu anki linux-64 kanallarında eşleşen paket bulunamadı: nimfa == 1.2.3

Bu paketi anaconda.org'da şu şekilde arayabilirsiniz:

anaconda search -t conda nimfa ==1.2.3

Bir hata atmak yerine, bu davranışı gereksinimler.txt içindeki tüm mevcut paketleri yükleyecek ve mevcut olmayanlar için bir uyarı verecek şekilde değiştirmek mümkün müdür?

Bunu isterdim çünkü hatanın mevcut olmadığını söylediği nimfa paketi pip kurulabilir. Dolayısıyla conda install --yes --file requirements.txt, kullanılamayan paketler için bir uyarı atma davranışını değiştirebilirsem, pip install -r requirments.txt.travis.yml'deki komutu takip edebilirim, böylece TravisCI onu mevcut olduğu herhangi bir yerden yüklemeye çalışır.

Yanıtlar:


170

Dosyanın satırlarını yineledim

$ while read requirement; do conda install --yes $requirement; done < requirements.txt

Düzenleme : Conda aracılığıyla mevcut değilse pip kullanarak bir paket kurmak istiyorsanız, bunu bir deneyin:

$ while read requirement; do conda install --yes $requirement || pip install $requirement; done < requirements.txt

Düzenleme : Windows kullanıyorsanız (kredi @Clay'e gider ):

$ FOR /F "delims=~" %f in (requirements.txt) DO conda install --yes "%f" || pip install "%f"


5
Bunun için teşekkürler, onu kullanan herkes için küçük bir ipucu, gereksinim.txt dosyanızın bir satırsonu ile bittiğinden emin olun, böylece son paket
okunsun

1
Yineleme sırasında pip installkullanılamayan paketleri otomatik olarak almanın bir yolu var mı conda install?
PeterB

2
@delusionX, cevabı genişlettim.
Hoffmann

11
@TillHoffmann'ın Windows makinedeki çözümü: FOR /F "delims=~" %f in (requirements.txt) DO conda install --yes "%f" || pip install "%f" Çok iyi çalışıyor. Teşekkürler!
Clay

3
Gereksinimler dosyasında yorumlarınız varsa, pip ayrıntılı bir şekilde şikayet eder (zararsızsa can sıkıcıdır). Yorumları görmezden gelen tek while read req; do if [[ $req != "#"* ]]; then conda install --yes $requirement || pip install $requirement; fi; done < requirements.txt
satırlık


1

Arayanlar için bunu @TillHoffmann'ın balık kabuğu çözümü olarak kullandım:

$ while read requirement; conda install --yes $requirement; end < requirements.txt

Ve

$ while read requirement; conda install --yes $requirement;or pip install $requirement; end < requirements.txt

1

Pbms'nin buradaki cevabı, kopyalanacak mevcut bir ortamınız olduğunu varsayarak, bunu yapmanın doğru yoludur. Conda, bölümünde listelendiği gibi hem Conda paketlerini hem de pip paketlerini kurabilir environment.yml. Tüm süreci daha detaylı belgelemek istedim. Klasör tabanlı ortamları kullandığımı unutmayın, bu nedenle --prefix [path to environment folder]çoğu komuta ekledim .

Mevcut klasörde çağrılan bir klasöre mevcut bir proje için aşağıdaki gibi bir ortam yüklediğinizi varsayalım env:

conda create --prefix ./env

Bu environment.ymlprojenin ortamı için şunun gibi üretirsiniz:

conda env export --prefix ./env > environment.yml

environment.ymlOraya kopyalayıp oradan çalıştırarak başka bir klasörde yeni bir ortam oluşturursunuz :

conda env create --prefix ./env --file environment.yml

Bir environment.ymlkez daha environment.ymloraya kopyalayıp oradan çalıştırarak zaten var olan bir ortamı eşleştirebilirsiniz :

conda env update --prefix ./env --file environment.yml --prune

Söz konusu ortam aktifken, paketlerinin durumunu şu şekilde doğrularsınız:

conda list

Bu, komutun yazdırabileceği şeyin kısaltılmış bir sürümüdür (pip paketlerinin işaretlendiğine dikkat edin 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

Son olarak, bu neye environment.ymlbenzeyebileceğinin kısaltılmış bir versiyonudur ( pip paketlerinin kendi kategorilerinde listelendiğini unutmayın):

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 ve pip'i birlikte kullanmanın mide ekşimesine neden olabileceğini unutmayın çünkü bilmeden birbirlerinin bağımlılıklarını ortadan kaldırabilirler. İkisi arasında geçiş yapmak yerine, önce tüm Conda paketlerinizi, ardından tüm pip paketlerinizi kurmanız gerekir. Ortamınız bozulursa, resmi öneri onu silmek ve yeniden oluşturmaktır ( environment.ymldosyanızdan). Daha fazla ayrıntı için şu kılavuza bakın:

https://www.anaconda.com/using-pip-in-a-conda-environment/

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.