So erstellen Sie eine Python-Ei-Datei


91

Ich habe Fragen zu Eidateien in Python.

Ich habe viel Python-Code nach Paket organisiert und versuche, Eidateien zu erstellen. Ich folge Anweisungen , aber sie sind sehr häufig.

Demnach brauche ich anscheinend eine setup.py-Datei.

  1. Würden Sie mir bitte sagen, was ich in die Datei setup.py einfügen muss und wo sie sich befinden soll?
  2. Ich nehme an, es reicht aus, setup.py zu erstellen und dann "setup.py bdist_egg" zu starten, um die Eidatei abzurufen. Könnten Sie bitte bestätigen?
  3. Ist es möglich, nur .pyc-Dateien in die Egg-Datei aufzunehmen?
  4. Mit einer .egg-Datei, wie kann ich den Code einfach starten, ohne ihn zu entpacken java -jar <jar file>?

Was soll ich dann anstelle von Eiern verwenden? Hier ist meine Frage zu Eiern stackoverflow.com/questions/14902732/…
Grün

@YauhenYakimovich: Dieser Link ist jetzt eine geparkte Spam-Domain. Vielleicht lohnt es sich zu bearbeiten, um package.python.org/en/latest/wheel_egg zu verwenden ?
Chris Adams

Antworten:


74

Sie lesen die falsche Dokumentation. Sie möchten dies: https://setuptools.readthedocs.io/en/latest/setuptools.html#develop-deploy-the-project-source-in-development-mode

  1. Erstellen setup.py in der distutils Dokumentation in Pythons Standardbibliothek Dokumentation behandelt hier . Der Hauptunterschied (für Python Eier) ist es, Ihnen import setupaus setuptools, nicht distutils.

  2. Ja. Das sollte richtig sein.

  3. Das glaube ich nicht. pycDateien können version- und plattformabhängig sein. Möglicherweise können Sie das Ei öffnen (es sollten nur Zip-Dateien sein) und .pyDateien löschen, die Dateien hinterlassen. .pycDies wird jedoch nicht empfohlen.

  4. Ich bin mir nicht sicher. Das könnte "Entwicklungsmodus" sein. Oder suchen Sie nach einem "py2exe" - oder "py2app" -Modus?


51
+1: Fügen Sie niemals die .pyc-Dateien hinzu. Sie sind total verwirrend. Wir haben versehentlich Windows .pyc-Dateien auf eine Linux-Box kopiert und hatten die verwirrendsten Fehler-Traceback-Meldungen aller Zeiten. Weil die Dateinamen die ursprünglichen Windows-Dateinamen waren. Es war erschreckend, diese Windows-Dateinamen auf dem Produktionsserver zu sehen.
S.Lott

Verwenden Sie einfach Pyinstaller
Nickpick

30

Für # 4 ist das Starten von Java mit einer JAR-Datei für Ihre App eine neue Funktion in Python 2.6, ausführbare Zip-Dateien und Verzeichnisse .

python myapp.zip

Wobei myapp.zip eine Zip- __main__.pyDatei ist, die eine Datei enthält, die als auszuführende Skriptdatei ausgeführt wird. Ihre Paketabhängigkeiten können auch in die Datei aufgenommen werden:

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

Sie können auch ein Ei ausführen, aber die Beschwörung ist nicht so schön:

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

Dadurch wird die Datei myapp.egg in den Python-Pfad eingefügt und mit dem Argument -m ein Modul ausgeführt. Ihre myapp.egg wird wahrscheinlich ungefähr so ​​aussehen:

myapp/__init__.py
myapp/somelibfile.py

Und Python wird ausgeführt __init__.py(Sie sollten dies __file__=='__main__'in Ihrer App für die Verwendung in der Befehlszeile überprüfen ).

Egg-Dateien sind nur Zip-Dateien, sodass Sie sie möglicherweise __main__.pymit einem Zip-Tool zu Ihrem Ei hinzufügen und in Python 2.6 ausführbar machen und wie python myapp.egganstelle der obigen Beschwörung ausführen können, in der die Umgebungsvariable PYTHONPATH festgelegt ist.

Weitere Informationen zu ausführbaren Zip-Dateien, einschließlich der Möglichkeit , sie mit einem Shebang direkt ausführbar zu machen , finden Sie in Michael Foords Blog-Beitrag zu diesem Thema .



10

Ich denke, Sie sollten jetzt Python-Räder für die Verteilung anstelle von Ei verwenden.

Räder sind der neue Standard der Pythonverteilung und sollen Eier ersetzen. Unterstützung wird in pip> = 1.4 und setuptools> = 0.8 angeboten.


2
Sie können kein Rad importieren, soweit ich das beurteilen kann. Manchmal möchte ich mein Skript nur zusammen mit einem Ei bereitstellen, um es portabler zu machen.
Gillespie
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.