Co to jest jajko Python?

531

Jestem nowy w Pythonie i próbuję zrozumieć, jak działają jego pakiety. Przypuszczalnie „jajka” są rodzajem mechanizmu pakowania, ale jaki byłby szybki przegląd roli, jaką odgrywają i może być pewną informacją o tym, dlaczego są przydatne i jak je utworzyć?

Białecki
źródło

Odpowiedzi:

527

Uwaga: Opakowanie jaj zostało zastąpione opakowaniem kół.

Ta sama koncepcja, co .jarplik w Javie, jest to .zipplik z nazwą niektórych plików metadanych.egg , służący do dystrybucji kodu jako pakietów.

W szczególności: wewnętrzna struktura jaj Python

„Jajo Pythona” to logiczna struktura zawierająca wydanie określonej wersji projektu Pythona, składająca się z jego kodu, zasobów i metadanych. Istnieje wiele formatów, których można użyć do fizycznego kodowania jaja Python, a inne można opracować. Jednak podstawową zasadą jaj Python jest to, że powinny one być możliwe do wykrycia i importowania. Oznacza to, że aplikacja Python powinna mieć możliwość łatwego i skutecznego sprawdzenia, jakie jaja są obecne w systemie, oraz zapewnienia, że ​​zawartość żądanych jaj można importować.

.eggFormat jest dobrze nadaje się do dystrybucji i łatwej deinstalacji lub aktualizacji kodu, ponieważ projekt jest w zasadzie samowystarczalny w jednym katalogu lub pliku, unmingled z kodem lub zasobów innych projektach. Umożliwia także jednoczesną instalację wielu wersji projektu, dzięki czemu poszczególne programy mogą wybrać wersje, których chcą używać.

jefe2000
źródło
82

.eggPlik jest formatem dystrybucji pakietów Pythona. To tylko alternatywa dla dystrybucji kodu źródłowego lub systemu Windows exe. Ale zauważ, że dla czystej Python,.egg plik jest całkowicie cross-platform.

Sam .eggplik jest zasadniczo .zipplikiem. Jeśli zmienisz rozszerzenie na „zip ”, zobaczysz, że będą miały foldery w archiwum.

Ponadto, jeśli masz .egg plik, możesz go zainstalować jako pakiet za pomocąeasy_install

Przykład: Aby utworzyć .eggplik dla katalogu, powiedzmy, że mymathsam może mieć kilka skryptów Python, wykonaj następujący krok:

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

Następnie z terminalu wykonaj:

 $ python setup.py bdist_egg

To wygeneruje wiele wyników, ale po zakończeniu zobaczysz, że masz trzy nowe foldery: build , dist i mymath.egg-info . Jedyny folder, na którym nam zależy, to folder dist, w którym znajdziesz swój .eggplik,mymath-0.1-py3.5.egg z domyślnym numerem wersji (instalacji) Pythona (mój tutaj: 3.5)

Źródło: blog biblioteki Python

kmario23
źródło
3

Jajka w języku Python są sposobem na wiązanie dodatkowych informacji z projektem Python, który pozwala na sprawdzenie i zaspokojenie zależności projektu w czasie wykonywania, a także na dostarczenie wtyczek do innych projektów. Istnieje kilka formatów binarnych, które zawierają jaja, ale najpopularniejszym z nich jest format pliku zip .egg, ponieważ jest on wygodny do dystrybucji projektów. Obsługiwane są wszystkie formaty, w tym dane specyficzne dla pakietu, metadane dla całego projektu, rozszerzenia C i kod Python.

Najłatwiejszym sposobem instalacji i używania jaj Python jest użycie menedżera pakietów Python „Łatwa instalacja”, który znajdzie, pobierze, zbuduje i zainstaluje jajka; wystarczy, że podasz nazwę (i opcjonalnie wersję) projektu (projektów) Python, którego chcesz użyć.

Jajka Python mogą być używane z Python 2.3 i nowszymi oraz mogą być budowane przy użyciu pakietu setuptools (zobacz kod źródłowy Python Subversion dla kodu źródłowego lub stronę EasyInstall, aby uzyskać aktualne instrukcje instalacji).

Główne zalety Python Eggs to:

  • Umożliwiają narzędzia takie jak menedżer pakietów Python „Łatwa instalacja”

  • Pliki .egg są formatem „zero instalacji” dla pakietu Python; nie jest wymagany krok kompilacji ani instalacji, wystarczy umieścić je na PYTHONPATH lub sys.path i użyć ich (może wymagać zainstalowania środowiska wykonawczego, jeśli używane są rozszerzenia C lub pliki danych)

  • Mogą zawierać metadane pakietu, takie jak inne jajka, na których polegają

  • Pozwalają one na podzielenie „pakietów przestrzeni nazw” (pakietów zawierających tylko inne pakiety) na osobne dystrybucje (np. Zope. , Twisted. , Peak. *). Pakiety mogą być dystrybuowane jako osobne jaja, w przeciwieństwie do normalnych pakietów, które zawsze muszą być umieszczone pod tym samym katalog nadrzędny. Pozwala to na rozprowadzanie dużych pakietów monolitycznych jako osobnych komponentów).

  • Umożliwiają aplikacjom lub bibliotekom określenie potrzebnej wersji biblioteki, dzięki czemu można np. Wymagać („Twisted-Internet> = 2.0”) przed wykonaniem importu twisted.internet.

  • Są doskonałym formatem do dystrybucji rozszerzeń lub wtyczek do rozszerzalnych aplikacji i platform (takich jak Trac, który używa jaj do wtyczek od wersji 0.9b1), ponieważ środowisko wykonawcze jaj zapewnia proste interfejsy API do lokalizowania jaj i znajdowania ich reklamowanych punktów wejścia (podobne do koncepcji „punktu rozszerzenia” Eclipse).

Istnieją również inne korzyści wynikające ze znormalizowanego formatu, podobne do korzyści płynących z formatu „jar” Javy.

prosti
źródło
czy jajo Pythona jest specyficzne dla wersji? tj. jajko zbudowane dla 2 vs 3? a nawet pomniejsze wersje? ex 2.x
ealeon
1

„Jajko” to importowany z jednego pliku format dystrybucji dla projektów związanych z Pythonem.

W „Szybkim przewodniku po jajach Python” zauważono, że „Jaja są dla Pytonów, tak jak słoiki dla Javy ...”

Jajka są bogatsze niż słoiki; przechowują interesujące metadane, takie jak szczegóły dotyczące licencji, zależności od wydania itp.

Aerin
źródło
Link jest martwy na dzień dzisiejszy.
Perfi
@Perfi Link działa dla mnie.
Klik
Zabawne, jak to czasem działa! Wrócił online. Cieszę się, że to widzę :)
Perfi