conda ile pip Arasındaki Fark: Hangi Paket Hangi Araçla Kurulur?
pip yalnız Python paketlerini kurar ve ortam yönetimini başka bir araca bırakır; conda ise ortamı, Python'un kendisini ve Python dışı bağımlılıkları da tek elden yönetir. Anaconda kullanan biri için asıl soru hangisinin daha iyi olduğu değil, ikisinin aynı ortamda hangi sırayla kullanılacağıdır.
Bir bakışta
- pip bir paket kurucusu, conda bir paket ve ortam yöneticisidir. pip ile yalıtılmış ortam için venv gibi ayrı bir araç gerekir; conda ortam oluşturmayı kendisi yapar.
- conda Python dışındaki bağımlılıkları da kurabilir. conda belgeleri aracı "her dil için paket, bağımlılık ve ortam yönetimi" olarak tanımlar.
- Aynı ortamda önce conda, sonra pip kullanılır. Anaconda'nın önerisi, conda ile kurulabilecek her şeyi önce kurmak ve pip'i yalnız kalanlar için kullanmaktır.
- pip'ten sonra conda çalıştırmak ortamı bozabilir. Değişiklik gerektiğinde mevcut ortamı yamamak yerine ortamı baştan kurmak daha güvenlidir.
İkisi de paket kurar, ama aynı şeyi yönetmez
pip ile conda'nın karıştırılmasının nedeni, ikisinin de komut satırında "install" diye başlayan ve bir paketi kuran araçlar olmasıdır. Ancak yönettikleri alanın genişliği farklıdır. pip, Python'un standart paket kurucusudur: PyPI'dan Python paketlerini indirir ve çalışan Python yorumlayıcısının ortamına kurar. Hangi Python sürümünün kullanılacağı, projelerin birbirinden nasıl ayrılacağı pip'in işi değildir; bunun için venv gibi ayrı bir araç kullanılır.
conda belgeleri ise conda'yı Windows, macOS ve Linux'ta çalışan bir paket ve ortam yönetimi aracı olarak tanıtır ve "her dil için paket, bağımlılık ve ortam yönetimi" sağladığını belirtir. conda bir ortam oluşturabilir, o ortama belirli bir Python sürümünü kurabilir ve Python paketlerinin ihtiyaç duyduğu derlenmiş kütüphaneleri de paket olarak getirebilir.
Kısacası pip "bu Python'a şu paketi kur" der; conda ise "bu proje için şu Python, şu paketler ve şu sistem kütüphaneleriyle ayrı bir ortam kur" der. İkisi rakip değil, farklı katmanlarda çalışan araçlardır.
Ölçüt ölçüt farklar
Karar verirken şu ölçütlere bakın:
- Kapsam: pip: Python paketleri. / conda: Python paketleri, Python'un kendisi ve Python dışı bağımlılıklar.
- Ortam yönetimi: pip: yok, venv ya da benzeri bir araçla birlikte kullanılır. / conda: conda create ile ortam oluşturur, conda activate ile ortamlar arasında geçer.
- Paket kaynağı: pip: PyPI. / conda: varsayılan kanallar ve conda install conda-forge::numpy örneğindeki gibi belirtilen kanallar.
- Paket yelpazesi: pip: PyPI'daki geniş Python paket evreni. / conda: kanallarda paketlenmiş olanlarla sınırlıdır; her PyPI paketi conda paketi olarak bulunmaz.
- Derlenmiş bağımlılıklar: pip: paket hazır derlenmiş dosya sunmuyorsa kaynak koddan derlemeye çalışır ve sistemde derleyici gerektirebilir. / conda: derlenmiş kütüphaneleri hazır paket olarak getirir.
- Ortamı dosyaya yazma: pip: requirements dosyası. / conda: ortam dosyası, içinde pip paketleri de listelenebilir.
Veri biliminde conda'nın yaygın olmasının nedeni bu son iki maddedir: bilimsel kütüphanelerin derlenmiş bağımlılıkları conda ile daha az sürprizle kurulur.
Aynı ortamda ikisini birlikte kullanmak
Anaconda ortamında çalışan birçok kişi er geç conda kanallarında bulunmayan bir paketle karşılaşır ve pip'e başvurur. Bu meşru bir kullanımdır, ama sıra önemlidir. Anaconda'nın conda ortamında pip kullanımına dair yazısındaki öneriler şöyle özetlenebilir.
Önce proje için yeni ve ayrı bir ortam oluşturun; temel ortama pip ile paket kurmayın. Ardından conda ile kurulabilecek her paketi conda ile kurun. Ancak bundan sonra, conda'da bulunmayan paketleri o ortamın içinden pip ile kurun: python -m pip install paket_adi. Son olarak ortamın conda ve pip gereksinimlerini sürüm kontrolüne alınabilecek bir dosyaya yazın.
Bu sıranın nedeni, conda'nın pip ile kurulan paketlerin bağımlılıklarını izlememesidir. pip'ten sonra conda ile yeni bir paket kurulduğunda conda, pip'in kurduğu paketlerin üzerine yazabilir ve ortam tutarsız hale gelebilir. Ortamda değişiklik gerekiyorsa, mevcut ortamı yamamak yerine güncellenmiş gereksinim dosyasından yeni bir ortam kurmak daha güvenlidir.
Önce conda, sonra pip: sıra ortamın sağlamlığını belirler
- Ayrı ortamProje için yeni bir conda ortamı oluşturulur, temel ortama dokunulmaz.
- conda ile kurKanallarda bulunan her paket önce conda ile kurulur.
- pip ile tamamlaYalnız conda'da olmayan paketler ortamın içinden pip ile kurulur.
- Dosyaya yazconda ve pip gereksinimleri tek dosyada saklanır.
Hangi durumda hangisi?
Veri bilimi, makine öğrenmesi ya da bilimsel hesaplama projesi kuruyorsanız ve kütüphaneleriniz derlenmiş bağımlılıklara dayanıyorsa conda ile ortam kurmak işinizi kolaylaştırır. Farklı projelerde farklı Python sürümleri gerekiyorsa da conda, sürümü ortamın bir parçası olarak yönettiği için pratiktir. Ekibinizin Anaconda ya da Miniconda kullandığı bir yerde çalışıyorsanız ortak dil de conda olur.
Uygulama geliştirme, web arka ucu ya da otomasyon betikleri yazıyorsanız ve bağımlılıklarınız saf Python paketlerinden oluşuyorsa, venv ile pip yeterli ve daha hafif bir çözümdür. Sunucuya ya da kapsayıcıya dağıtılacak uygulamalarda da genellikle bu düzen tercih edilir, çünkü dağıtım ortamında conda bulunmayabilir. Yine de bilimsel kütüphanelere dayanan bir servis kapsayıcıya taşınacaksa, imajın içinde ortam dosyasından kurulan bir conda ortamı da kullanılabilir; karar, dağıtım ortamının neyi desteklediğine göre verilir.
Paketinizi başkalarının kullanması için yayımlayacaksanız hedef PyPI'dır ve pip ile kurulabilir olması beklenir; isteğe bağlı olarak conda kanallarına da paketlenebilir. Hangi yolu seçerseniz seçin, ortamın tanımını bir dosyada tutmak, başka bir bilgisayarda aynı ortamı yeniden kurmanın tek güvenilir yoludur.
Sık yapılan hatalar
En yaygın hata, hangi ortamda olduğunu bilmeden pip çalıştırmaktır. conda ortamı etkin değilken yazılan pip install, paketi temel ortama ya da sistem Python'una kurar; proje ise başka bir ortamda çalıştığı için paket "bulunamaz". python -m pip kullanmak, paketin o anda çalışan Python'a kurulmasını sağlar.
İkinci hata, aynı paketi önce conda, sonra pip ile ya da tersi sırayla kurmaktır. İki araç aynı paketin iki ayrı kopyasını yönetmeye çalışır ve hangisinin yüklendiği belirsizleşir. Üçüncü hata, her şeyi temel ortama kurmaktır; zamanla temel ortam çakışan sürümlerle dolar ve conda'nın kendisi bile güncellenemez hale gelebilir.
Son olarak, pip ile kurulan paketlerden sonra yeniden conda install çalıştırmak ortamı sessizce bozabilir. Böyle bir değişiklik gerekiyorsa ortam dosyasını güncelleyip ortamı baştan kurmak, sorunları ayıklamaya çalışmaktan daha kısa sürer.
Ortam bozan alışkanlıkların yerine tekrarlanabilir düzen
Mindset programlarında ortam ve paket yönetimi
Data Science Bootcamp'in Python modülleri, modüller ve paketlerle çalışmayı ve Python komut satırı ile geliştirme ortamı kullanımını ele alır; veri bilimi projelerinde ortam kurmak bu temelin üzerine oturur.
Python ile Programlama Eğitimi modüller ve paketler konusunu dilin temeliyle birlikte işler. Paketlerini başkalarıyla paylaşmak isteyen geliştiriciler için Python Paketleme ve Dağıtım (Poetry, uv) eğitimi, bağımlılık yönetimini dağıtım tarafına taşır.
İlgili Mindset programı
Data Science Bootcamp
Sık sorulan sorular
Anaconda ile conda aynı şey mi?
Hayır. conda, paket ve ortam yönetimi yapan komut satırı aracıdır. Anaconda ise conda'yı ve veri biliminde sık kullanılan birçok paketi bir arada sunan bir dağıtımdır. Miniconda da conda'yı içeren ama paket yelpazesi en aza indirilmiş bir dağıtımdır. Hangisini kullanırsanız kullanın ortam ve paket işlemlerini conda komutlarıyla yaparsınız.
conda ortam dosyasına pip paketleri yazılabilir mi?
Evet. Ortam dosyasında conda bağımlılıklarının altında pip için ayrı bir liste tanımlanabilir ve ortam bu dosyadan kurulduğunda önce conda paketleri, ardından pip paketleri kurulur. Bu, önerilen "önce conda, sonra pip" sırasını dosya düzeyinde korur ve ortamın başka bir bilgisayarda aynı biçimde yeniden kurulmasını sağlar.
Jupyter defterinde hangi ortamın kullanıldığını nasıl anlarım?
Defterde import sys ve ardından print(sys.executable) çalıştırmak, çekirdeğin hangi Python yorumlayıcısını kullandığını gösterir. Bu yol, kurmak istediğiniz paketin gideceği ortamla aynı değilse, paket kurulduğu halde defterde bulunamaz. Her conda ortamını defterde ayrı bir çekirdek olarak tanımlamak bu karışıklığı önler.
conda kanalları arasında fark var mı?
conda belgelerine göre kanallar paketlerin saklandığı konumlardır ve conda varsayılan olarak kendi varsayılan kanallarında arar. conda-forge gibi topluluk kanalları daha geniş bir paket yelpazesi sunabilir. Aynı ortamda paketleri gelişigüzel farklı kanallardan karıştırmak uyumsuzluk yaratabileceği için bir ortamda tutarlı bir kanal düzeni kullanmak önerilir.
pip ile kurduğum paketler conda list çıktısında görünür mü?
Görünür; conda list, ortamdaki pip ile kurulmuş paketleri de listeler ve bunların PyPI'dan geldiğini kanal sütununda belirtir. Ancak görünmesi, conda'nın bu paketlerin bağımlılıklarını yönettiği anlamına gelmez. conda bir sonraki kurulumda bu paketlerin ihtiyaçlarını hesaba katmaz; önce conda, sonra pip sırasının önemi buradan gelir.
Her proje için ayrı conda ortamı açmak diski doldurmaz mı?
Anaconda'nın önerilerinde belirtildiği gibi conda ortamları birbirinden yalıtılmıştır ve farklı paket sürümlerine izin verir; aynı paket dosyaları mümkün olduğunda sabit bağlantılarla paylaşıldığı için disk maliyeti sanıldığı kadar yüksek değildir. Kullanılmayan ortamları zaman zaman silmek ve paket önbelleğini temizlemek yine de iyi bir alışkanlıktır.