Grundsätzlich gibt es zwei Möglichkeiten, Python-Konsolenskripte auf meinem Pfad zu installieren setup.py
:
setup(
...
entry_points = {
'console_scripts': [
'foo = package.module:func',
],
}
)
und
setup(
...
scripts = [
'scripts/myscript.sh'
]
)
Was sind die Unterschiede? Ich sehe, dass der erste Ansatz es mir ermöglicht, einen schönen, spezifischen Namen für mein Skript zu wählen, aber gibt es noch andere Unterschiede? Unterschiedliche ursprüngliche Zwecke, Kompatibilität (Setuptools, Distutils, ...?), Verwendung, ...? Ich bin ziemlich verwirrt und eine nette, ausgearbeitete Antwort könnte mir (und wahrscheinlich auch anderen) helfen, all dies richtig zu verstehen.
Update: Da ich die Frage gestellt PyPA veröffentlicht diese kühlen Dokumente zum Thema .
Antworten:
Die Dokumente für das (fantastische) Click-Paket enthalten einige Gründe , Einstiegspunkte anstelle von Skripten zu verwenden, einschließlich
__name__
durch den Interpreter__main__
, da dies dazu führen kann, dass Code zweimal importiert wird (wenn ein anderes Modul Ihr Skript importiert).Click ist eine
entry_points
gute Möglichkeit, Funktionen für die Verwendung als zu implementieren.quelle
Ein wesentlicher Unterschied zwischen diesen beiden Methoden zum Erstellen von ausführbaren Befehlszeilendateien besteht darin, dass Sie beim
setuptools
Ansatz (Ihrem ersten Beispiel) eine Funktion innerhalb des Skripts aufrufen müssen - in Ihrem Fall ist dies diefunc
Innenseite Ihrermodule
. Imdistutils
Ansatz (Ihrem zweiten Beispiel) rufen Sie das Skript jedoch direkt auf (wodurch eine Auflistung mit oder ohne Erweiterung möglich ist).quelle
scripts
die einzige Möglichkeit zu sein, ein benutzerdefiniertes Skript einzuschließen, beispielsweise ein WSGI-Skript anstelle eines Befehlszeilenskripts.entry_points
generiert immer eine ausführbare Befehlszeile. (Ob das eine gute Idee ist, weiß ich nichtDer Einstiegspunktansatz für Setup-Tools (Nr. 1) hat auch den Vorteil, dass unter Windows eine EXE-Datei erstellt wird, die wie ein normales Windows-Programm doppelt angeklickt und aufgerufen werden kann. Dies ist zusätzlich dazu, dass auf posix-ähnlichen Systemen ein Skript im Bin-Pfad abgelegt wird.
quelle
Ein weiterer Unterschied besteht darin, dass bei Verwendung von console_scripts die Init- Datei meines Moduls ausgeführt wurde. Wenn nur Skripte verwendet wurden, wurde das Modul init nicht ausgeführt, sondern nur das Skript.
quelle