Conda, virtualenv ihtiyacının yerini alıyor mu?


205

Geçenlerde keşfetti Conda özellikle ben geliştiriyorum bir Heroku uygulaması üzerinde, sorun scipy yükledikten başlamıştı sonra.

Conda ile virtualenv'in yaptıklarına çok benzeyen ortamlar yaratırsınız . Sorularım:

  1. Eğer Conda kullanırsam, virtualenv ihtiyacının yerini alacak mı? Değilse, ikisini birlikte nasıl kullanırım? Conda'ya virtualenv veya virtualenv'e Conda yükleyebilir miyim?
  2. Hala pip kullanmam gerekiyor mu? Öyleyse, yalıtılmış bir ortamda pip'li paketleri kurabilir miyim?

Heroku'da conda ve pip kullanmakla ilgileniyorsanız, bkz. Örneğin github.com/faph/conda-pip-buildpack
faph

Teşekkürler. Github'da Heroku için oldukça fazla sayıda conda yapı paketi olduğunu fark ettim. Hangi yapı paketinin kullanılacağına karar verirken hangi faktörleri dikkate almalıyım?
Kritz

Doğrudan Continuum sunucularında bulunmayan paketleri kurmak istiyorsanız pip kullanmanız gerekeceğini unutmayın.
ali_m

Evet, hala Django 1.8'de (1.9 değil) olduklarını gördüm. Şu anda her yerde conda (scipy ve numpy) ve pip kullanacağım - ama yine de conda içinde.
Kritz

Çoğu conda Heroku yapı paketlerinin sanırım Kenneth Reitz'inki. İnsanlar onları tercihlerine göre ayarlıyorlardı. İhtiyacınız olan şey bu ise hem conda hem de pip desteği içerip içermediklerini kontrol edin. Ve eğer environment.yml dosyasını destekliyorlarsa. Oluşturma komut dosyasını beğenip beğenmediğinizi görmek, örneğin ortamların tam olarak nasıl oluşturulduğunu görmek için her zaman hızlı bir şekilde buildpack koduna bakabilirsiniz.
faph

Yanıtlar:


157
  1. Conda, virtualenv'in yerini alıyor. Bence daha iyi. Python ile sınırlı değildir, diğer diller için de kullanılabilir. Deneyimlerime göre, özellikle bilimsel paketler için çok daha sorunsuz bir deneyim sunuyor. MayaVi'yi Mac'e düzgün bir şekilde yüklediğimde conda.

  2. Yine de kullanabilirsiniz pip. Aslında, her yeni ortama condayüklenir pip. Pip kurulumlu paketleri bilir.

Örneğin:

conda list

mevcut ortamınızdaki kurulu tüm paketleri listeler. Conda tarafından yüklenen paketler şu şekilde görünür:

sphinx_rtd_theme          0.1.7                    py35_0    defaults

ve üzeri yüklü olanlar pipvar <pip>işaretleyici:

wxpython-common           3.0.0.0                   <pip>

8
Anaconda ortamında pip kullanmanın olumsuz bir etkisi var mı? Conda aracılığıyla bir paket mevcut olsa bile pip kullanmak isteyebileceğiniz bir durum var mı?
clifgray

Fark, tire ve alt çizgi arasındaki farktır? Paket adında hiçbiri yoksa ne olur? Nasıl ayırt edilir?
Tom Hale

1
Alt çizgi veya kısa çizgi, paket adının bir parçasıdır. Bunun pip veya conda ile ilgisi yoktur. <pip>O pip ile yüklendiğini gösterir aksi takdirde Conda birlikte yüklenir.
Mike Müller

4
"Conda pip-pack paketleri biliyor" ile büyük bir uyarı var. Anladığım kadarıyla, bir conda env içinde pip bağımsız olarak hareket ediyor, bu yüzden conda pip yüklü paketleri kaldıramıyor
information_interchange

1
@clifgray - yerel paylaşılan kitaplıklara sahip pip ve conda paketleri, C hata ayıklayıcısıyla hızlanmayan biri için hata ayıklamaya zorlanan her türlü yerel dünya hatasına (sigsegv-s, vb.) neden olan ikili uyumsuz sürümleri yükleyebilir. Sadece python paketleri için aynıdır, sadece bunların anlaşılması kolaydır.
bobah

61

Kısa cevap, sadece condaya ihtiyacınız var.

  1. Conda, pip ve virtualenv'in işlevselliğini tek bir pakette etkili bir şekilde birleştirir, bu nedenle conda kullanıyorsanız virtualenv'e ihtiyacınız yoktur.

  2. Conda'nın kaç paketi desteklediğine şaşıracaksınız. Yeterli değilse, conda altında pip kullanabilirsiniz.

Conda, pip ve virtualenv'i karşılaştıran conda sayfasına bir link:

https://docs.conda.io/projects/conda/en/latest/commands.html#conda-vs-pip-vs-virtualenv-commands .


34

Sanal Ortamlar ve pip

Anaconda ile conda ortamları oluşturmanın ve kaldırmanın basit olduğunu da ekleyeceğim .

> conda create --name <envname> python=<version> <optional dependencies>

> conda remove --name <envname> --all 

Bir In aktive ortamda , paketler yoluyla yüklemek condaveya pip:

(envname)> conda install <package>

(envname)> pip install <package>

Bu ortamlar, conda'nın pip benzeri paket yönetimine güçlü bir şekilde bağlıdır , bu nedenle ortamlar oluşturmak ve hem Python hem de Python olmayan paketleri yüklemek kolaydır.


Jupyter

Buna ek olarak, bir ortama kurulumipykernel Jupyter dizüstü bilgisayarların Çekirdekler açılır menüsüne yeni bir liste ekleyerek tekrarlanabilir ortamları dizüstü bilgisayarlara genişletir. Anaconda 4.1'den itibaren, not defterlerine daha kolay uzantılar ekleyerek nbextensions eklendi .

Güvenilirlik

Tecrübelerime göre, Conda hızlı ve daha güvenilir gibi büyük kütüphaneleri yükleme altındadır numpyve pandas. Ayrıca, bir ortamın korunmuş halini aktarmak istiyorsanız, bunu bir env'yi paylaşarak veya klonlayarak yapabilirsiniz .


18

Conda'yı yüklemek, istediğiniz gibi python ortamları oluşturmanıza ve kaldırmanıza olanak tanır, böylece virtualenv ile aynı işlevselliği sağlar .

Her iki dağıtımda da python paketlerini (muhtemelen pip ile) istediğiniz gibi kurabileceğiniz ve kaldırabileceğiniz yalıtılmış bir dosya sistemi ağacı oluşturabilirsiniz. Farklı kullanım durumları için aynı kütüphanenin farklı sürümlerine sahip olmak veya sadece bazı dağıtımları denemek ve daha sonra disk alanınızı koruyarak kaldırmak istiyorsanız kullanışlı olabilir.

farklılıklar:

Lisans anlaşması. Virtualenv çoğu liberal MIT lisansı kapsamında olsa da , Conda 3 yanlı BSD lisansı kullanır.

Conda size kendi paket kontrol sistemlerini sunar. Bu paket kontrol sistemi genellikle bazı python olmayan yazılımların önceden derlenmiş sürümlerini (en popüler sistemler için) sağlar, bu da bazı makine öğrenme paketlerinin çalışmasını kolaylaştırabilir. Yani sisteminiz için optimize edilmiş C / C ++ kodunu derlemek zorunda değilsiniz. Çoğumuz için büyük bir rahatlama olsa da, bu tür kütüphanelerin performansını etkileyebilir.

Virtualenv'in aksine, Conda en azından Linux sisteminde bazı sistem kitaplıklarını çoğaltır. Bu kütüphaneler senkronize olabilir ve programlarınızın tutarsız davranışlarına yol açabilir.

Karar:

Conda harika ve makine öğrenimine başlarken varsayılan seçiminiz olmalı. Gcc ve çok sayıda paketle uğraşmaktan biraz zaman kazandıracak. Ancak Conda, virtualenv'in yerini almaz. Her zaman istenmeyebilecek bazı ek karmaşıklık getirir. Farklı bir lisans altında gelir. Conda'yı dağıtılmış ortamlarda veya HPC donanımında kullanmaktan kaçınmak isteyebilirsiniz.


2
biraz daha ayrıntılı zihin neden "dağıtılmış ortamlarda veya HPC donanımında conda kullanmaktan kaçınmak isteyebilirsiniz"? @ y.selivonchyk
Oliver Hu

1
Bu sonuçların bazılarına katılmıyorum. "Tutarsız program davranışı", programlarınızı condayüklü yazılım ve kitaplıkları kullanacak şekilde yapılandırmamanın bir sonucudur . Ve HPC'de, condabirçok durumda tercih edilir, aslında HPC Yöneticileri tarafından modulesistemler gibi şeylerin yerini almak için kullanılır . HPC'de iki büyük sorun olan kullanıcı tarafından yüklenen yazılım ve daha fazla yazılım yalıtımı sağlar. Yaşadığım tek uyarı, birçok HPC dosya sisteminin bir dizindeki dosya sayısı üzerinde zor sınırlara sahip olması ve conda'nın 1000'in üzerinde dosya oluşturmasıdır.
user5359531

9

Her ikisini de kullanıyorum ve (Ocak 2020 itibariyle), benim için farklı kullanımlara borç veren bazı yüzeysel farklılıklar var. By varsayılan Virtualenv geçerli dizinde bir klasör yapar oysa Conda, merkezi bir konumda sizin için ortamların listesini yönetmek için tercih ediyor. Eski (merkezi), örneğin makine öğrenimi yapıyor ve birçok projede kullandığınız ve her yerden bunlara atlamak istediğiniz birkaç geniş ortama sahipseniz mantıklıdır. İkincisi (proje klasörü başına), projenin kendisine daha fazla ait olan tamamen farklı lib gereksinimleri kümelerine sahip küçük bir kerelik projeler yapıyorsanız mantıklıdır.

Conda'nın oluşturduğu boş ortam 122MB, sanal ortamlar ise 12MB civarındadır, bu nedenle Conda ortamlarını her yere dağıtmamayı tercih etmenin başka bir nedeni de budur.

Son olarak, Conda'nın merkezi envilerini tercih ettiği başka bir yüzeysel gösterge, kendi proje klasörünüzde bir Conda env oluşturup onu kabuğunuzda görünen ad önekinin (çok uzun) mutlak olması durumunda (yine varsayılan olarak) klasör yolu. Bunu bir ad vererek düzeltebilirsiniz, ancak virtualenv varsayılan olarak doğru şeyi yapar.

İki paket yöneticisi baskınlık için yarışırken bu bilgilerin hızla eski haline gelmesini bekliyorum, ancak bunlar bugün itibariyle değiş tokuşlar :)


İyi açıklama! Her ikisini de kullanmakta zorluk çekiyor musunuz? Hiç kullandın pipenvmı?
Mikhail_Sam

8

Başka bir yeni seçenek ve şu anda bir ortamın çalıştırılması için tercih ettiğim yöntem Pipenv

Şu anda Python.org tarafından resmi olarak tavsiye edilen Python paketleme aracıdır.


1
Bu "ha? Pipenv ne?" İstendiğinde, götürdü hangi reddit.com/r/Python/comments/8jd6aq/... ve sedimental.org/the_packaging_gradient.html . Ne kullanacağımı hala bilmiyorum ama en azından daha iyi bilgilendirildim. Bence.
matt wilkie

Giriş izledikten ve hızlı bir şekilde tanıtımı okuduktan sonra, pipenv Python sürümlerini yönetemiyor gibi görünüyor ...
Carles Alcolea

Alcolea pipenv çeşitli versiyonları da şu şekilde belirtebilir: pipenv --twoPython2 ve pipenv için
Kurian Benoy

3

Evet, condakurulumu çok daha kolay virtualenvve ikincisinin yerini alıyor.


6
Anaconda neden bir sanal ortamın yerine geçmesi için talimatlar veriyor?
jmh

1
@jmh Anaconda sanal ortamların yerini almaz, Python'a özgü sanal ortam yönetim aracını virtualenvdaha genel bir sanal ortam yönetim aracıyla değiştirir conda. Ayrıca, Anaconda sadece Conda aracını içeren bir Python + dağıtımıdır; soru (ve cevap) sadece Conda ile ilgilidir.
merv

3
Bu cevap, yıllar önce gelen cevapların ötesine hiçbir şey eklemez.
merv

1

Kurumsal olarak, yönetici erişimim olmayan makineli birkaç güvenlik duvarının arkasında çalışıyorum

Python (2 yıl) ile sınırlı deneyimimde pip aracılığıyla yüklerken C ++ bağımlılık hataları hatası attı birkaç kütüphane (JayDeBeApi, sasl) rastladım: Microsoft Visual C ++ 14.0 gereklidir. "Microsoft Visual C ++ Derleme Araçları" ile edinin: http://landinghub.visualstudio.com/visual-cpp-build-tools

Bunlar conda ile iyi yüklü, bu nedenle o günden beri conda env ile çalışmaya başladı. Ancak, ben yazma erişimi olmayan c.programfiles içine bağımlılık yükleme conda durdurmak kolay değildir.

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.