Python'da paket / modül yönetim sistemi var mı?


145

Python'da, Ruby'nin yapabileceğiniz rubygems'lere sahip olmasına benzer bir paket / modül yönetim sistemi var gem install packagenamemı?

On Python Modülleri takma , sadece başvurular bkz python setup.py install, ama bu ilk paketi bulmak gerektirir.


3
Python'un paket dizini PyPI'nin paketlerin nasıl kurulacağına dair daha net talimatlar olması gerektiğini düşünüyorsanız, lütfen bitbucket.org/pypa/pypi/issue/149/…
Albay Panic

O sırada güncel olsa da, bu sorudaki bağlantı artık eski distutils belgelerine bağlanmıştır. Bu belgelerin artık son kullanıcı belgeleri olarak kullanılmaya uygun olmadıklarının daha net olması gerektiğini belirtmek için bugs.python.org/issue26014 belgesini dosyaladım (yalnızca araç uygulayıcılarının yararı için saklanıyorlar).
ncoghlan

Yanıtlar:


213

Son ilerleme

Mart 2014 : İyi haber! Python 3.4 , Pip ile birlikte gelir. Pip, uzun süredir Python'un fiili standart paket yöneticisi olmuştur. Bunun gibi bir paket kurabilirsiniz :

pip install httpie

Wahey! Bu, herhangi bir Python sürümünün en iyi özelliğidir. Topluluğun kütüphane zenginliğini herkes için erişilebilir kılar. Yeni başlayanlar artık kurulumun engelleyici zorluğu nedeniyle topluluk kitaplıklarını kullanmaktan dışlanmıyor.

Bununla birlikte, Python paketleme deneyimiyle ilgili bir dizi olağanüstü hayal kırıklığı var. Kümülatif olarak, Python'u yeni başlayanlar için çok istenmeyen hale getiriyorlar. Ayrıca, ihmalin uzun geçmişi (yani, Python 2.0'dan Python 3.3'e 14 yıl boyunca bir paket yöneticisi ile gönderilmemesi) topluluğa zarar verdi. Her ikisini de aşağıda tarif ediyorum.

Olağanüstü hayal kırıklıkları

Deneyimli kullanıcılar bu hayal kırıklıklarının üstesinden gelebilse de, bunların Python'a yeni başlayanlar için önemli engeller olduğunu anlamak önemlidir. Aslında, zorluk ve genel kullanıcı dostluğu pek çoğunu caydırabilir.

PyPI web sitesi karşı yardımcıdır

Paket yöneticisi olan her dil, topluluğun paketleri indirip yayınlaması için resmi (veya yarı resmi) bir havuza sahiptir. Python, Python Paket Dizini, PyPI'ye sahiptir. https://pypi.python.org/pypi

Sayfalarını RubyGems ve Npm (Düğüm paketi yöneticisi) ile karşılaştıralım.

  1. Paket için https://rubygems.org/gems/rails RubyGems sayfasırails
  2. Paket için https://www.npmjs.org/package/express Npm sayfasıexpress
  3. https://pypi.python.org/pypi/simplejson/ Paket için PyPI sayfasısimplejson

RubyGems ve Npm sayfalarının her ikisinin de paketin tek satırlık bir açıklamasıyla başladığını göreceksiniz, ardından onu nasıl kuracağınıza dair büyük ve kolay talimatlar.

Bu arada, PyPI'ye saf bir şekilde göz atan tüm talihsiz Python kullanıcılarının vay haline. On https://pypi.python.org/pypi/simplejson/ , onlar böyle yararlı talimatları bulacaksınız. Ancak, büyük, yeşil bir 'İndir' bağlantısı vardır. Onu takip etmek mantıksız değil. Aha, tıklıyorlar! Tarayıcıları bir .tar.gzdosya indirir . Birçok Windows kullanıcısı onu açamaz bile, ancak sebat ederlerse, sonunda onu çıkarabilir, ardından çalıştırabilir setup.pyve sonunda Google'ın yardımıyla setup.py install. Bazıları pes edecek ve tekerleği yeniden icat edecek ..

Tabii ki bunların hepsi yanlış. En kolay bir paket yüklemek için yolu Pip komutuyla olduğunu. Ama PyPI, Pip'ten bahsetmedi bile. Bunun yerine, onları arkaik ve sıkıcı bir yola götürdü.

Hata: vcvarsall.bat bulunamıyor

Numpy, Python'un en popüler kütüphanelerinden biridir. Pip ile yüklemeyi deneyin, şu şifreli hata mesajını alırsınız:

Hata: vcvarsall.bat bulunamıyor

Stack Overflow'daki en popüler sorulardan biri olan bu sorunu gidermeye çalışmak: " hata: vcvarsall.bat bulunamadı "

Çok az insan başarılı.

Karşılaştırma için, aynı durumda, Ruby neler olduğunu ve nasıl düzeltileceğini açıklayan bu mesajı yazdırır:

Lütfen derleme araçlarını eklemek veya DevKit'i http://rubyinstaller.org/downloads adresinden indirmek için PATH'nizi güncelleyin ve http://github.com/oneclick/rubyinstaller/wiki/Development-Kit adresindeki talimatları izleyin.

Paketleri yayınlamak zordur

Ruby ve Nodejs, tam özellikli paket yöneticileri Gem (2007'den beri) ve Npm (2011'den beri) ile birlikte gelir ve GitHub merkezli paylaşım topluluklarını beslemiştir. Npm, paket yayınlamayı yüklemek kadar kolay hale getirir , zaten 64k pakete sahiptir . RubyGems 72k paketi listeler . Saygıdeğer Python paket dizini yalnızca 41k'yi listeler .

Tarih

" Piller dahil " mottosu karşısında uçan Python, 2014 yılına kadar paket yöneticisi olmadan sevk edildi.

Pip'e kadar fiili standart bir komuttu easy_install. Ne yazık ki yetersizdi. Paketleri kaldırma komutu yoktu.

Pip büyük bir gelişmeydi. Ruby's Gem'in çoğu özelliğine sahipti. Ne yazık ki, Pip - yakın zamana kadar - ironik bir şekilde kurulumu zordu. Aslında, sorun Stack Overflow'da en çok sorulan Python sorusu olmaya devam ediyor: " Windows'a pip'i nasıl yüklerim? "


3
İlgilenen herkes için, PEP 439 pip kurulum sürecini düzene sokmanın bir yolunu öneriyor, ancak bence bu KEP, bakılan daha geniş bir stratejinin sadece bir parçası. Ayrıca burada tartışmaya bakın .
Cartroo

3
@Cartroo bu harika bir haber! Python bir paket yöneticisini hak ediyor, umarım geliştiriciler bunu başarabilir.
Albay Panic

Kesinlikle, gecikmiş. En azından Python 3.4'e girmesini kesinlikle umuyorum. Maalesef 2.x'e geri taşınacağından çok şüpheliyim, ancak en azından tünelin sonunda ışık var. Bunun yaklaşmakta olan bir ejderha olmadığını umalım ...
^ _ ^)

6
Python'un savunmasında, Ruby ve Node gibi daha yeni diller, önceki dillerin hatalarını gözlemleyebilme ve bunlardan kaçınabilme şansına sahipti. Bununla birlikte, Python'da paket yönetiminin daha fazla sevgi ve özen almasını gerçekten diliyorum, bu yüzden @ Cartroo'nun belirttiği gibi PEP 439'u görmekten memnunum.
Dennis

Ruby'nin paket yönetiminin benim (son kullanıcı) bakış açıma göre harika bir şey olduğuna katılıyorum .. gem install Xsadece tüm platformlarda çalışıyor gibi görünüyor. Peki bunu Windows'ta C kodu derlemesi gerektiren mücevherler için nasıl başardılar?
bsa

63

Ve sadece bir kontrast sağlamak için pip de var .


2
Teşekkürler! Python modüllerini kurma dokümantasyon sayfasında neden pip'den bahsedilmiyor?
tommy chheng

Pip'in yumurtaları desteklemediğini, yalnızca kaynak paketleri kurduğunu unutmayın. Genel olarak konuşursak, pip birçok şeyi easy_install'dan çok daha iyi yapar, ancak easy_install varsayılan olarak çoğu unix'te kurulur, pip değil.
Jeffrey Harris

8
@Tommy Doğru! Python geliştiricileri kullanıcı deneyimini önemsiyorsa, Python'u bir paket yöneticisiyle (pip gibi) gönderirdi. Ruby Gem ile, Nodejs ise Npm ile gönderilir. stackoverflow.com/a/13445719/284795
Albay Panic

63

Python Paket Dizini (PyPI) standart görünüyor:

  • To yüklemek bir paket: pip install MyProject
  • To güncellemek bir paket pip install --upgrade MyProject
  • İçin bir sürüm düzeltmek bir paketinpip install MyProject==1.0

Paket yöneticisini aşağıdaki şekilde kurabilirsiniz:

curl -O http://python-distribute.org/distribute_setup.py
python distribute_setup.py
easy_install pip

Referanslar:


3
Bu modern cevap.
Gringo Suave

6
İnterneti 20 dakika aradım ve bu cevap hiçbir yerde yoktu. Çok teşekkür ederim. Ayrıca, dokümantasyon bu kadar kötüyse python kullanma konusunda ciddi şüphelerim var ... bu Python ana sayfasında olmalı veya google'dan veya başka bir şeyden
Chris J

21

Ruby ve Perl geliştiricisi ve Python öğrenen biri olarak, easy_install veya pip'i RubyGems veya CPAN'a eşdeğer bulamadım.

Geliştiriciler onları güncelledikçe geliştirme sistemlerimi modüllerin en son sürümlerini çalıştırma eğilimindeyim ve üretim sistemlerimi ayarlanmış sürümlerde donduruyorum. Hem RubyGems hem de CPAN, mevcut olanları listeleyerek modülleri bulmayı kolaylaştırır, ardından bunları tek tek veya toplu olarak kurun ve daha sonra güncelleyin.

easy_install ve pip, bir modülün kurulumunu kolaylaştırıyor Bir tarayıcı aramasıyla buldum veya başka yollarla öğrendim, ancak bana neyin mevcut olduğunu söylemiyorlar. Güncellenecek modülü açıkça adlandırabilirim, ancak uygulamalar bana neyin güncellendiğini söylemeyecek veya istersem her şeyi toplu olarak güncellemeyecek.

Yani, temel işlevsellik pip ve easy_install'da var, ancak onları daha kolay ve kullanımı daha kolay hale getirecek ve CPAN ve RubyGems ile eşit olacak şekilde görmek istediğim eksik özellikler var.


Bu cevap artık iyi ve gerçekten modası geçmiş durumda.
ncoghlan


11

En azından 2014'ün sonlarından itibaren Continuum Analytics'in conda ile Anaconda Python dağıtımı paket yöneticisi düşünülmelidir. İnsanların Python ile genel olarak karşılaştıkları ciddi sorunların çoğunu (farklı Python sürümlerini yönetmek, Python sürümlerini güncellemek, paket yönetimi, sanal ortamlar, Windows / Mac uyumluluğu) tek bir bütünleşik indirmede çözer.

Sistemi değiştirmenize gerek kalmadan Python ile yapmak isteyebileceğiniz hemen hemen her şeyi yapmanızı sağlar. Bir sonraki tercih ettiğim çözüm pip + virtualenv, ancak ya virtualenv'i sistem Python'unuza yüklemeniz gerekir (ve sisteminiz Python istediğiniz sürüm olmayabilir) ya da kaynaktan derlemeniz gerekir . Anaconda, tüm bu süreci tek bir düğmenin tıklaması ve bir dizi başka özellik ekleyerek yapar.


7

Bu easy_install olurdu .


1
Sayfadaki herkese olumsuz oy vermek istiyorsanız easy_install, lütfen önce tarihleri ​​kontrol edin. Yaklaşık 7 yıl önce verildiğinde bu geçerli bir öğüttü . Cevap verenlerin bunu güncellemek için düzenli olarak tekrar ziyaret edeceğimizi sanmıyorum, bu yüzden olumsuz oylama aptalca.
Kirk Strauser


5

Buradaki diğer yanıtlarda MacPorts veya Homebrew'den bahsedildiğini görmüyorum , ancak ilgili sorular için Stack Overflow'da başka bir yerde bahsedildiğini gördüğüm için, birçok kişinin MacPorts'u yalnızca bir paket olarak görmediği için kendi US $ 0,02 dolarımı ekleyeceğim genel olarak paket yöneticisi (bugün itibariyle 16311 paket / bağlantı noktası listeliyorlar, 2931 "python" ile eşleşen, sadece Mac'ler için de olsa), ama aynı zamanda Python paketleri / modülleri için iyi (belki daha iyi) bir paket yöneticisi olarak:

Soru

"... Mac python geliştiricilerinin modüllerini yönetmek için kullandıkları yöntem nedir?"

Yanıtlar

SciPy

"Mac'ler (Linux'tan farklı olarak) bir paket yöneticisi ile birlikte gelmez, ancak yükleyebileceğiniz birkaç popüler paket yöneticisi vardır. Macports ..."

Hâlâ MacPorts'u kendim kullanıp kullanmamayı tartışıyorum, ancak şu anda bu yönde eğiliyorum.


1
Homebrew'in kendisi şöyle diyor: Python paketlerini (eski easy_install veya) ile yükleyebilirsiniz pip install <your_favorite_package>
Simone

4

Windows'ta http://chocolatey.org/ yükleyin ve ardından

choco install python

Güncellenmiş PATH ile yeni bir cmd penceresi açın. Sonra yap

choco install pip

Bundan sonra yapabilirsin

pip install pyside
pip install ipython
...

Bunu Thomas
Bratt'ın cevabına

3

Burada kimse pipenv'den bahsetmediğinden , neden herkesin python paketlerini yönetmek için kullanması gerektiğine dair görüşlerimi açıklamak istiyorum.

@ColonelPanic'in bahsettiği gibi Python Paket Dizini ve ayrıca pip ve virtualenv ile ilgili birkaç sorun var .

Pipenv , pip ile ilgili sorunların çoğunu çözer ve ek özellikler de sağlar.

Pipenv özellikleri

Pipenv'in pip ve virtualenv'in yerini alması amaçlanmıştır; bu, pipenv'in her proje için otomatik olarak ayrı bir sanal ortam oluşturacağı ve böylece farklı projeler için farklı python sürümleri / paket sürümleri arasındaki çakışmaları önleyeceği anlamına gelir.

  • Yalnızca istediğinizi kolayca belirlerken gerçekten belirleyici yapıları etkinleştirir.
  • Kilitli bağımlılıklar için dosya karmaları oluşturur ve denetler.
  • Pyenv mevcutsa, gerekli Pythons'u otomatik olarak kurun.
  • Bir Pipfile arayarak projenizi özyinelemeli olarak otomatik olarak bulur.
  • Mevcut değilse, otomatik olarak bir Pipfile oluşturur.
  • Standart bir konumda otomatik olarak bir sanal ortam oluşturur.
  • Paketleri kaldırıldıklarında / kurulduklarında bir Pipfile'a otomatik olarak ekler / kaldırır.
  • Varsa .env dosyalarını otomatik olarak yükler.

Daha önce python projeleri üzerinde çalıştıysanız, bu özelliklerin paketleri yönetmeyi çok daha kolaylaştırdığını fark edeceksiniz.

Diğer Komutlar

  • checkgüvenlik açıklarını kontrol eder ve PEP 508 gereksinimlerinin mevcut ortam tarafından karşılandığını iddia eder. ( özellikle bundan sonra harika bir özellik olduğunu düşünüyorum - PyPi'deki kötü amaçlı paketler )
  • graph size yüklü bağımlılıklarınızın bir bağımlılık grafiğini gösterecektir.

Burada bu konuda daha fazla bilgi bulabilirsiniz - Pipenv .

Kurulum

Kurulum belgelerini burada bulabilirsiniz

Not: Python Paketi talepleriyle çalışmayı sevdiyseniz , pipenv'in aynı geliştirici Kenneth Reitz'e ait olduğunu bilmekten memnuniyet duyarsınız.



0

Şiir aradığınız şeydir. Bağımlılık yönetimi, sanal ortamlar, çalıştırma ile ilgilenir.

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.