Wie erklärt man eine Abhängigkeit von gi.repository in setup.py (und der erforderlichen C-Bibliothek)?

8

Ich verpacke eine Python-Anwendung, die durch Gobject-Introspektion von mehreren C-Bibliotheken abhängt. Ich möchte sicherstellen, dass zumindest das Python-Modul aus dem glib installiert ist (das ist das gi-Modul, das in Debian als python-gi verpackt ist, ich spreche nicht über das veraltete PyGObject-Modul). Wenn Sie sie als reguläre Abhängigkeit hinzufügen, schlägt die Installation fehl, da sie nicht in Pypi enthalten ist.

Wie soll ich das erklären? Ich sah ein Setup-Tool und nichts, was ich sehe, macht den Trick.

Danke.

Verwandte Frage:

Cans 05.02.2014, 15:46
quelle

1 Antwort

1

Sie können keine Nicht-Python-Abhängigkeiten mit setuptools (AFAIK, das ist ...) angeben.

Die install_requires -Schlüsselwörter auf setuptools.setup können nur Abhängigkeiten im Python-Stil angeben; Es zielt auf die Python-Verpackungsinfrastruktur ab. Installationsprogramme im Python-Stil (entweder pip , easy-install oder python setup.py install ) lösen solche Abhängigkeiten mithilfe von Strategien zum Auffinden und Auflösen von Python- nur Style-Pakete. Eine dieser Strategien verwendet einen Paket-Index wie PyPI.

Wenn Sie ein Paket mit Debian-ähnlichen Abhängigkeiten erstellen möchten, die von Debian-ähnlichen Installationsprogrammen gelöst werden und Debian-Paket-Repos verwenden, müssen Sie ein Debian-Paket erstellen. Es gibt Tools, die das Erstellen von Debian-Paketen aus Python-Projekten unterstützen, zum Beispiel easydeb und stdeb . Die meisten Leute empfehlen jedoch, die Extra-Meile zu gehen und explizit ein Debian-Paket zu erstellen.

Im Allgemeinen sollte das Python-Paketieren und Verteilen über PyPI der richtige Weg sein. Es ist Plattform- und Distro-unabhängig und spielt gut mit Python-spezifischen Installern wie pip und Tools wie virtualenv oder Buildout . Eine Abhängigkeit von PyGI würde das Dokumentieren der Tatsache für Benutzer beinhalten, wie z.B. Die pydbus-Pakete finden Sie in der README-Datei:

  

Es basiert auf PyGI, den Python GObject Introspection Bindings, die   ist die empfohlene Möglichkeit, GLib aus Python zu verwenden. Leider ist PyGI   nicht auf Pypi, also müssen Sie es von Ihrem installieren   das Repository der Distribution (normalerweise python-gi, python-gobject oder   pygobject3).

Ihr Projekt könnte auch defensiv sein, wenn es aus PyGI importiert wird, und Benutzern eine verdauliche Fehlermeldung wie "Bitte sudo apt-get install python-gi" oder so präsentieren, wenn der Import fehlschlägt.

    
fpbhb 16.03.2015, 22:15
quelle