Dağıtım, dağıtım araçları, kurulum araçları ve dağıtım dosyaları arasındaki farklar2?


594

Durum

Ben Python 3 ( SymPy , kimse merak ediyorsa) bir açık kaynak kütüphane port çalışıyorum .

Yani, 2to3Python 3 için inşa ederken otomatik olarak çalıştırmam gerekiyor . Bunu yapmak için kullanmam gerekiyor distribute. Bu nedenle, (doctest'e göre) olan mevcut sistemi taşımam gerekiyor distutils.


Sorun

Ne yazık ki, Emin bu modules- arasındaki fark ne değilim distutils, distribute, setuptools. Belgeler en iyi şekilde kabataslaktır, çünkü hepsi birbirlerinin çatalları gibi görünmektedir, çoğu durumda (ama aslında hepsi değil) uyumlu olması amaçlanmıştır ... vb.


Soru

Birisi farklılıkları açıklayabilir mi? Ne kullanmam gerekiyor? En modern çözüm nedir? (Bir yana, taşıma konusunda bazı rehberleri de takdir ediyorum Distribute, ancak bu sorunun kapsamının biraz ötesinde…)


22
Ne kadar kafa karıştırıcı? Java / C ++ arka planından python'a geldim. Bu durumlarda, dağıtım çok basittir. Python ile tüm bu dağıtım sistemleri konusunda tamamen kafam karıştı.
Raffi Khatchadourian

75
Katılıyorum, Python paketleme / kurulum topluluktan net bir rehberlik olmadan çok fazla alternatif var.
Sabuncu

6
Ben sadece bu ilgili bilgileri ikili dağıtımları desteklemeyen pip hakkında bağlamak istedim lucumr.pocoo.org/2012/6/22/hate-hate-hate-everywhere
pixelbeat

@pixelbeat pip, tekerleklerin (ikili dağıtımlar olarak adlandırılır) takılmasını destekler, bu bağlantı güncel değildir.
Flimm

Yanıtlar:


836

Mart 2020 itibariyle, bu soruya verilen diğer cevapların çoğu yıllarca güncelliğini yitirmiştir. Python paketleme sorunları hakkında tavsiyelerde bulunduğunuzda, yayınlanma tarihine bakmayı unutmayın ve güncel olmayan bilgilere güvenmeyin.

Python Ambalaj Kullanım Kılavuzu değerinde bir okuma olduğunu. Her sayfada "son güncelleme" tarihi görüntülenir, bu nedenle kılavuzun yeniliğini kontrol edebilirsiniz ve oldukça kapsamlıdır. Python Yazılım Vakfı'nın python.org alt alanında barındırılması gerçeği buna güveniyor. Proje Özetler sayfa burada özellikle önemlidir.

Araçların özeti:

İşte Python paketleme ortamının bir özeti:

Desteklenen araçlar:

Kullanımdan kaldırılmış / terk edilmiş araçlar:

  • distributebir çataldı setuptools. Aynı ad alanını paylaştı, bu nedenle Distribute yüklediyseniz, import setuptoolsDistribute ile dağıtılan paketi içe aktarırdı. Dağıt yeniden Setuptools 0.7 ile birleştirildi , bu yüzden artık Dağıt kullanmanıza gerek yok. Aslında, Pypi'deki sürüm sadece Setuptools'u yükleyen bir uyumluluk katmanıdır.

  • distutils2En iyi almak için bir girişim oldu distutils, setuptoolsve distributePython'ın standart kütüphanesinde bulunan standart bir araç haline. Fikir, distutils2eski Python sürümleri için dağıtılacak ve standart kütüphanesine dahil distutils2edilecek packagingPython 3.3 için yeniden adlandırılacaktı . Ancak bu planlar planlandığı gibi gitmedi ve şu anda distutils2terk edilmiş bir proje . En son sürüm Mart 2012'de yapıldı ve Pypi ana sayfası sonunda ölümünü yansıtacak şekilde güncellendi.

Diğerleri:

İlgileniyorsanız başka araçlar da vardır, Python Ambalaj Kullanım Kılavuzu'ndaki Proje Özetleri'ni okuyun . Ben o sayfayı tekrarlamayın için ve sadece yaklaşık soruyu, eşleştirme cevabı tutmak, hepsini liste olmayacak distribute, distutils, setuptoolsve distutils2.

Öneri:

Tüm bu sizin için yeni olduğunu ve nereden başlayacağınızı bilmiyorsanız, ben öğrenmeyi öneriyoruzsetuptools birlikte pipve virtualenvhangi tüm çalışma çok iyi bir araya.

İçine arıyorsanız virtualenv, bu soruya ilginizi çekebilir: arasındaki fark nedir venv, pyvenv, pyenv, virtualenv, virtualenvwrapper, vs? . (Evet, biliyorum, seninle iniliyorum.)


2
@makeramen: Posta listesindeki bu konuya bakın .
Flimm

6
Ve daha iyi görünmüyor: 'Distribute' is a now deprecated fork of the 'Setuptools' project.@ PyPI Dağıtma sayfası.
KurzedMetal

3
@KurzedMetal, SetupTools çalışanlarına göre, setuptools 0.7 hem dağıtımı hem de eski setuptools'u evrene sırayla geri yükleyecek. Yani işler gerçekten gelişmeye hazır!
John McDonnell

8
Python Packaging Kullanıcı Kılavuzu piton ambalaj durumuna ilişkin en güncel bilgileri bulunur. 2013 PyCon'da Nick Coughlan tarafından not edildi .
imanuelcostigan

1
@Flimm Son düzenleme oldukça uzun zaman önceydi. Bento şimdiye kadar olgun mu?
Martin Thoma

251

Ben bir distutils sürdürücü ve distutils2 / ambalaj katkısı. ConFoo 2011'de Python ambalajı hakkında bir konuşma yaptım ve bugünlerde bunun genişletilmiş bir versiyonunu yazıyorum. Henüz yayınlanmadı, işte şeyleri tanımlamaya yardımcı olacak alıntılar.

  • Distutils , ambalajlama için kullanılan standart araçtır. Basit ihtiyaçlar için oldukça iyi çalışır, ancak sınırlıdır ve uzatılması önemsiz değildir.

  • Setuptools , eksik dağıtım işlevlerini doldurma ve yeni yönleri keşfetme arzusundan doğan bir projedir. Bazı alt topluluklarda fiili bir standarttır. Python çekirdek geliştiricileri tarafından kaşlarını çatmış maymun yaması ve büyü kullanıyor.

  • Distribute , geliştirme hızının çok yavaş olduğunu ve gelişmenin mümkün olmadığını düşünen geliştiriciler tarafından başlatılan bir Setuptools çatalıdır. Distutils2 aynı grup tarafından başlatıldığında gelişimi önemli ölçüde yavaşladı. 2013-Ağustos güncelleştirmesi: dağıtma yeniden kurulum araçlarına birleştirildi ve durduruldu.

  • Distutils2 distutils bir çatal olarak başlayan yeni distutils kütüphanesi, codebase, (bazı iyice KEP'lerde tartışıldı hangi) kurulum araçlarından alınan iyi fikirler ve pip esinlenerek temel yükleyicisi ile. Distutils2'yi içe aktarmak için kullandığınız gerçek ad packagingPython 3.3+ standart kütüphanesinde veya distutils22.4+ ve 3.1-3.2'de bulunur. (Bir backport yakında hazır olacak.) Distutils2, Python 3.3 sürümünü yayınlamadı ve beklemeye alındı.

Daha fazla bilgi:

Rehberimi yakında bitirmeyi umuyorum, her kütüphanenin güçlü ve zayıf noktaları ve bir geçiş kılavuzu hakkında daha fazla bilgi içerecektir.


1
Hayır. Distutils2, standardizasyondan sonra (PEP'ler) veya değil (örneğin, geliştirme komutu ve otomatik komut dosyası oluşturma ekleyen bir GSoC öğrencisine rehberlik ediyorum) kurulum araçlarından / dağıtımından bazı iyi fikirler alır, ancak hiçbir zaman bir bırakma olmaz değiştirme: istemediğimiz bazı parçalar var (yumurta, VCS entegrasyonu, vb.). OTOH, distutils2 kurulum araçlarının / dağıtımlarının sahip olmadığı bazı şeylere sahiptir. Geçişi kolaylaştırmak için, dağıtım geliştiricilerinin yeni standartları ve araçları desteklemek için distutils2'yi kullanacağını düşünüyorum; Kurulum araçları geliştiricisinin yeni standartları desteklemek istediğini söylediğini de hatırlıyorum.
Éric Araujo

1
Ez_setup tüm bunlara nerede düşüyor? Ayrıca distutils2'nin durumu hakkında herhangi bir güncelleme var mı?
James McMahon

2
@ ÉricAraujo Gecikmeyi duyduğuma üzüldüm. Umarım 3.4 için zamanında hazırdır! Ben seviyorum Python, ancak paketleme her zaman beni kafamı duvara patlama yaptı. (Diğer yandan rehberiniz nasıl geliyor? Eğer
bitmişse

9
@AlexisHuet Aşağıdaki yorumun bağlantısını ( sharedüğmeden alabilirsiniz ) içerecekse bu tür bir yorum daha iyi olurdu .
erikbwork

2
cevabı belki de distributeyakın zamanda tekrar birleştirildiğinden bahsetmek için güncellemelisiniz setuptools. Oradaki bilgilerin çoğunun eski olması, karışıklığa katkıda bulunur
Amro

5

NOT: Yanıt kullanımdan kaldırıldı, Dağıt şimdi kullanılmıyor. Bu cevap artık Python Paketleme Otoritesi kurulduğundan ve bu işi temizlemek için çok çalıştığı için geçerli değil.


Evet, anladın. : -o bence şu anda tercih edilen paket, dağıtım araçlarının (orijinal ambalajlama sistemi) bir uzantısı olan bir çatal olan Distribute'dur . Setuptools korunmadı, bu yüzden çatallandı ve yeniden adlandırıldı, ancak yüklendiğinde setuptools paket adını kullanıyor! Sanırım çoğu Python geliştiricisi Dağıt'ı kullanıyor ve yaptığımdan emin olabilirim.


Kayıt için, bu yanıtı kabul ettim çünkü bana şimdi durumu anlattı (Ve bunun çatalı, diğer cevaptaki resmin bahsetmediği ilişkinin uzantısıdır). Ve yol boyunca bir yerde belgelerin kendisinin ne söylemeye çalıştığından genellikle emin olmadığını öğrendim.
VPeric

2
@VPeric, Gerçekten de, belgeler python'un bu yönünün bir akış / karmaşa durumunda olduğunu yansıtmaktadır.
juanchopanza

2

Orijinal sorununuzdaki sorgulanmamış varsayımları ele almadan ikincil sorunuza yanıt verdiğimin farkındayım:

Python 3 için bir açık kaynak kitaplığı (SymPy, herkes merak ediyorsa) bağlantı noktası çalışıyorum. Bunu yapmak için, Python 3 için derlerken otomatik olarak 2to3 çalıştırmak gerekir.

Sen olabilir değil ihtiyaç . Diğer stratejiler http://docs.python.org/dev/howto/pyporting adresinde açıklanmaktadır.

Bunu yapmak için dağıtımı kullanmam lazım,

Sen olabilir 's dağıtmak farklı bir şekilde, distutils (değil Docstringler) kodu destekleri birikmesi zaman 2to3 dönüşüm :): http://docs.python.org/dev/howto/pyporting#during-installation


Teşekkürler, ancak dönüşümü ele almak için senaryomuzu yazarak sorunu çözmeye karar verdik. Ve evet, 2to3 kullanmaktan başka seçenekler olduğunu biliyordum, ancak SymPy karmaşık bir kod tabanı (son kontrol ettiğimde 200k + satır) ve 2to3'ü kullanmak tek gerçekçi stratejiydi. Her durumda tekrar teşekkürler!
VPeric

2

Neyse ki Python paketleme kaosunun Continuum'un " conda " paket yöneticisi tarafından büyük ölçüde temizlendiği 2014 sonlarında bu sorunun güncellenmesi .

Özellikle, conda hızlı bir şekilde conda " ortamlarının " oluşturulmasını sağlar . Ortamlarınızı farklı Python sürümleriyle yapılandırabilirsiniz. Örneğin:

conda create -n py34 python=3.4 anaconda

conda create -n py26 python=2.6 anaconda

Python'un farklı sürümlerine sahip iki ("py34" veya "py26") Python ortamı oluşturacaktır.

Daha sonra, Python'un belirli bir sürümüyle çevreyi şu şekilde çağırabilirsiniz:

source activate <env name>

Bu özellik, Python'un farklı sürümüyle uğraşmak zorunda olduğunuz durumda özellikle yararlı görünüyor.

Ayrıca, conda aşağıdaki özelliklere sahiptir:

  • Python agnostik
  • Çapraz platform
  • Yönetici ayrıcalığı gerekmez
  • Akıllı bağımlılık yönetimi (SAT çözücü aracılığıyla)
  • Bağlanmak zorunda kalabileceğiniz C, Fortran ve sistem seviyesi kütüphaneleri ile güzel bir şekilde ilgilenir

Bilimsel bilgi işlem alanındaysanız bu son nokta özellikle önemlidir.

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.