Jak stworzyć plik jajko w Pythonie

91

Mam pytania dotyczące plików jaj w Pythonie.

Mam dużo kodu Pythona uporządkowanego według pakietów i próbuję tworzyć pliki jaj. Postępuję zgodnie z instrukcjami , ale są one bardzo powszechne.

W związku z tym wydaje mi się, że muszę mieć plik setup.py.

  1. Czy możesz mi powiedzieć, co muszę umieścić w pliku setup.py i gdzie powinien się znajdować?
  2. Przypuszczam, że wystarczy utworzyć plik setup.py, a następnie uruchomić „setup.py bdist_egg”, aby pobrać plik jajko. Czy mógłbyś potwierdzić?
  3. Czy można dołączyć tylko pliki .pyc do pliku egg?
  4. Mając plik .egg, jak mogę po prostu uruchomić z niego kod bez rozpakowywania, jak java -jar <jar file>robi?
yart
źródło
Czego więc powinienem użyć zamiast jajek? Oto moje pytanie dotyczące stackoverflow.com/questions/14902732/…
Green
@YauhenYakimovich: ten link jest teraz zaparkowaną domeną spamu. Może warto edytować, aby korzystać z packages.python.org/en/latest/wheel_egg ?
Chris Adams,

Odpowiedzi:

74

Czytasz niewłaściwą dokumentację. Chcesz tego: https://setuptools.readthedocs.io/en/latest/setuptools.html#develop-deploy-the-project-source-in-development-mode

  1. Tworzenie setup.py jest opisane w dokumentacji distutils w standardowej dokumentacji biblioteki Pythona tutaj . Główna różnica (w przypadku jaj pytona) pochodzi import setupod Ciebie setuptools, a nie distutils.

  2. Tak. To powinno być słuszne.

  3. Nie sądzę. pycpliki mogą być zależne od wersji i platformy. Możesz być w stanie otworzyć jajko (powinny to być tylko pliki zip) i usunąć .pypliki pozostawiając .pycpliki, ale nie jest to zalecane.

  4. Nie jestem pewny. To może być „tryb programowania”. A może szukasz trybu „py2exe” lub „py2app”?

wisty
źródło
51
+1: nigdy nie dołączaj plików .pyc. Są całkowicie zagmatwane. Przypadkowo skopiowaliśmy pliki .pyc systemu Windows na komputer z systemem Linux i otrzymaliśmy najbardziej zagmatwane komunikaty o błędach w historii. Ponieważ nazwy plików to oryginalne nazwy plików systemu Windows. Widok tych nazw plików systemu Windows na serwerze produkcyjnym był przerażający.
S.Lott,
po prostu użyj pyinstaller
Nickpick
30

W przypadku # 4, najbliższą rzeczą do uruchomienia Java z plikiem jar dla Twojej aplikacji jest nowa funkcja w Pythonie 2.6, wykonywalne pliki zip i katalogi .

python myapp.zip

Gdzie myapp.zip jest plikiem zip zawierającym __main__.pyplik, który jest wykonywany jako plik skryptu do wykonania. W pliku można również uwzględnić zależności pakietów:

__main__.py
mypackage/__init__.py
mypackage/someliblibfile.py

Możesz także wykonać jajko, ale inkantacja nie jest tak przyjemna:

# Bourn Shell and derivatives (Linux/OSX/Unix)
PYTHONPATH=myapp.egg python -m myapp
rem Windows 
set PYTHONPATH=myapp.egg
python -m myapp

Spowoduje to umieszczenie myapp.egg w ścieżce Pythona i użycie argumentu -m do uruchomienia modułu. Twój plik myapp.egg prawdopodobnie będzie wyglądał następująco:

myapp/__init__.py
myapp/somelibfile.py

Python będzie działał __init__.py(powinieneś to sprawdzić __file__=='__main__'w swojej aplikacji, aby użyć wiersza poleceń).

Pliki Egg to po prostu pliki zip, więc możesz być w stanie dodać __main__.pydo swojego jajka za pomocą narzędzia zip i uczynić go wykonywalnym w Pythonie 2.6 i uruchomić go tak, jak python myapp.eggzamiast powyższej inkantacji, w której ustawiono zmienną środowiskową PYTHONPATH.

Więcej informacji o plikach wykonywalnych zip, w tym o tym, jak uczynić je bezpośrednio wykonywalnymi za pomocą shebang, można znaleźć w poście na blogu Michaela Foorda na ten temat .

lambacck
źródło
Alternatywnie można skorzystać z wirtualnego środowiska guide.python-distribute.org/installation.html#upgrading
Yauhen Yakimovich
10

Myślę, że zamiast jaja powinieneś teraz używać kół Pythona do dystrybucji.

Kółka są nowym standardem dystrybucji Pythona i mają zastąpić jajka. Wsparcie jest oferowane w pip> = 1.4 i setuptools> = 0.8.

Hanfei Sun
źródło
2
O ile wiem, nie możesz zaimportować koła. Czasami po prostu chcę wdrożyć mój skrypt wraz z jajkiem, aby był bardziej przenośny.
Gillespie