Ich möchte von jemand anderem Python-Dienstprogramm verwenden, foobartools, deren native Umgebung ist Linux. Foobartools ist pure Python, also gibt es keinen Grund, warum es nicht unter Windows verwendet werden kann, wo ich bin.Python: migrieren setup.py "scripts =" zu entry_points
In ihrem setup.py
verwenden sie den älteren Stil scripts=['bin/foobar'],
.
Das Ausführen von pip install -e b:\code\foobar
erstellt eine Datei namens foobar
in %pythonhome%\Scripts
, aber Windows weiß es nicht, obwohl Skripts in PATH ist. Um es zu verwenden, muss ich eine @python %pythonhome%\scripts\foobar
Stapeldatei machen. Dies funktioniert, ist aber nicht optimal (ctrl-c Handhabung ist hässlich zum Beispiel).
Ich weiß, dass wenn ich die neuere hinzufügen und empfohlen entry_points Syntax setup.py pip automatisch Scripts\foobar.exe
auf Windows erstellen (und ich kann die Batch-Datei Graben). Unter Linux bleibt Scripts\foobar
unverändert, und alle sind glücklich.
entry_points = {
'console_scripts': ['foobar = foobartools:main'],
}
Ich weiß nicht, was mit der rechten Seite der Gleichung zu tun, foobartools:main
. Wie mache ich diesen Anruf bin/foobar
? Das Modul foobartools hat keine einzelne aufrufbare Funktion oder ein solches Modul entspricht dem bin-Skript, und das bin-Skript ist relativ kompliziert.
Ich möchte so wenige Änderungen wie möglich an dem Projekt vornehmen, damit a) eine Patch-Einreichung eine bessere Chance hat, upstream akzeptiert zu werden, und b) wenn Upstream uninteressiert bleibt, muss ich weniger tun es.
[Update] Die bestehende Quelle Baumstruktur:
foobartools/
bin/foobar
foobartools/
__init__.py
foo/
__init__.py
one.py
two.py
bar/
...
baz/
...
setup.py
Ich denke, dass Sie mit einer sehr vernünftigen Lösung kamen. 'entry_points' funktioniert nur für Skripte, die innerhalb einer bestimmten Funktion in einem der enthaltenen Module gekapselt sind. Ich bin mir eigentlich nicht sicher, warum 'setuptools' eine solche Einschränkung auferlegt: - / –