Python yumurtası nedir?


532

Python'da yeniyim ve sadece paketlerinin nasıl çalıştığını anlamaya çalışıyorum. Muhtemelen "yumurtalar" bir çeşit paketleme mekanizmasıdır, ancak oynadıkları rol hakkında hızlı bir genel bakış nedir ve neden yararlı oldukları ve nasıl yaratıldıkları hakkında bazı bilgiler olabilir mi?

Yanıtlar:


527

Not: Yumurta ambalajının yerini Tekerlek ambalajı almıştır.

.jarJava'daki bir .zipdosya ile aynı kavramdır .egg, kodu paket olarak dağıtmak için bazı meta veri dosyalarının yeniden adlandırıldığı bir dosyadır .

Özellikle: Python Yumurtalarının İç Yapısı

"Python yumurtası", kodunu, kaynaklarını ve meta verilerini içeren bir Python projesinin belirli bir versiyonunun yayınlanmasını içeren mantıksal bir yapıdır. Bir Python yumurtasını fiziksel olarak kodlamak için kullanılabilecek birden fazla format vardır ve diğerleri geliştirilebilir. Bununla birlikte, Python yumurtalarının temel bir prensibi, keşfedilebilir ve ithal edilebilir olmalarıdır. Yani, bir Python uygulamasının bir sistemde hangi yumurtaların bulunduğunu kolayca ve etkili bir şekilde öğrenmesi ve istenen yumurta içeriğinin önemli olduğunu temin etmesi mümkün olmalıdır.

.eggProje esas olarak kendi kendine yeten tek bir dizin veya dosya içinde, unmingled başka projeler kod veya kaynaklarla olduğundan biçimi, dağıtım ve kolay kaldırma veya kod yükseltmeleri için çok uygundur. Ayrıca, tek tek programların kullanmak istedikleri sürümleri seçebilmesi için bir projenin birden çok sürümünün aynı anda yüklenmesini mümkün kılar.


82

.eggDosya Python paketleri için bir dağıtım biçimidir. Bu sadece bir kaynak kodu dağıtımına veya Windows'a bir alternatiftir exe. Ama saf için Python,.egg dosyanın tamamen çapraz platform olduğunu unutmayın.

.eggDosyanın kendisi aslında bir olduğunu .zipdosyası. Uzantıyı “ zip” olarak değiştirirseniz , arşivin içinde klasörler olacağını görebilirsiniz.

Ayrıca, bir .eggdosyanız varsa, bunu kullanarak bir paket olarak yükleyebilirsiniz.easy_install

Örnek: .eggBir dizin için bir dosya oluşturmak için mymathhangisinin birkaç python komut dosyasına sahip olabileceğini söyleyin , aşağıdaki adımı uygulayın:

# setup.py
from setuptools import setup, find_packages
setup(
    name = "mymath",
    version = "0.1",
    packages = find_packages()
    )

Ardından terminalden şunları yapın:

 $ python setup.py bdist_egg

Bu, çok sayıda çıktı üretir, ancak tamamlandığında üç yeni klasörünüz olduğunu görürsünüz : build , dist ve mymath.egg-info . Önem verdiğimiz tek klasör .eggdosyanızı bulacağınız dağıtım klasörü ,mymath-0.1-py3.5.egg varsayılan python (yükleme) sürüm numaranızla birlikte (burada: 3.5)

Kaynak: Python kütüphane blogu


3

Python yumurtaları, ek bilgilerin bir Python projesi ile bir araya getirilmesinin bir yoludur, bu da projenin bağımlılıklarının çalışma zamanında kontrol edilmesini ve tatmin edilmesini sağlar ve ayrıca projelerin diğer projeler için eklentiler sağlamasına izin verir. Yumurtaları oluşturan birkaç ikili format vardır, ancak en yaygın olanı '.egg' zip dosyası formatıdır, çünkü projeleri dağıtmak için uygun bir formattır. Pakete özgü veriler, proje çapında meta veriler, C uzantıları ve Python kodu dahil tüm formatlar desteklenir.

Python yumurtalarını kurmanın ve kullanmanın en kolay yolu, sizin için yumurta bulabilecek, indirecek, inşa edecek ve kuracak "Kolay Kurulum" Python paket yöneticisini kullanmaktır; tek yapmanız gereken ona kullanmak istediğiniz Python projelerinin adını (ve isteğe bağlı olarak sürümünü) söylemektir.

Python yumurtaları Python 2.3 ve üstü ile kullanılabilir ve setuptools paketi kullanılarak oluşturulabilir (kaynak kodu için Python Subversion sanal alanına veya geçerli kurulum talimatları için EasyInstall sayfasına bakın).

Python Eggs'in başlıca faydaları:

  • "Kolay Kurulum" Python paket yöneticisi gibi araçları etkinleştiriyorlar

  • .egg dosyaları bir Python paketi için "sıfır kurulum" biçimidir; derleme veya yükleme adımı gerekmez, sadece PYTHONPATH veya sys.path'e koyun ve kullanın (C uzantıları veya veri dosyaları kullanılıyorsa çalışma zamanının yüklenmesini gerektirebilir)

  • Bağladıkları diğer yumurtalar gibi paket meta verilerini içerebilirler

  • "Ad alanı paketleri" nin (sadece diğer paketleri içeren paketler) ayrı dağıtımlara bölünmesine izin verir (örn. Zope. , Bükülmüş , tepe. * Paketler, her zaman aynı altına yerleştirilmesi gereken normal ambalajların aksine ayrı yumurtalar olarak dağıtılabilir. Bu, büyük dev monolitik paketlerin artık ayrı bileşenler olarak dağıtılmasını sağlar.)

  • Uygulamaların veya kitaplıkların kitaplığın gerekli sürümünü belirtmesine izin verir, böylece twisted.internet dosyasını içe aktarmadan önce örneğin ("Twisted-Internet> = 2.0") gereksinim duyabilirsiniz.

  • Bunlar, uzantıları veya eklentileri genişletilebilir uygulamalara ve çerçevelere (0.9b1'den itibaren eklentiler için yumurta kullanan Trac gibi) dağıtmak için harika bir biçimdir, çünkü yumurta çalışma zamanı yumurtaları bulmak ve reklamı yapılan giriş noktalarını bulmak için basit API'ler sağlar (benzer Eclipse'nin "genişleme noktası" kavramına).

Java'nın "jar" biçiminin avantajlarına benzer şekilde, standartlaştırılmış bir biçime sahip olmanın getirebileceği başka avantajlar da vardır.


python yumurta bir sürüm belirli mi? yumurta 2 vs 3 için inşa? hatta küçük sürümler? eski 2.x
ealeon

1

"Yumurta", Python ile ilgili projeler için tek dosyadan alınabilen bir dağıtım formatıdır.

"Python Yumurtaları için Hızlı Kılavuz" , "Kavanozlar Java için Yumurtalar Pythons'a ..."

Yumurtalar aslında kavanozlardan daha zengindir; lisanslama ayrıntıları, sürüm bağımlılıkları vb. gibi ilginç meta veriler içerirler.


Bağlantı bugün itibariyle öldü.
Perfi

@Perfi Link benim için çalışıyor.
Klik

Komik nasıl çalışır bazen! Tekrar çevrimiçi. Gördüğüne sevindim :)
Perfi
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.