Setuptools plattformspezifische Abhängigkeiten

Gibt es eine Möglichkeit, Setup-Tools zu erzählen oder zu verteilen, um ein Paket auf einer bestimmten Plattform zu erfordern?

In meinem konkreten Fall verwende ich readline , die als Teil der Standardbibliothek auf Unix-Systemen kommt, aber unter Windows brauche ich das pyreadline Modul, um diese Funktionalität zu ersetzen (siehe diese Frage ). Wenn ich es einfach in die Anforderungen stelle, wird auch auf Unix-Systemen installiert, wo es völlig nutzlos ist.

  • Horizontaler Barplot mit Annotationen
  • Wie steht Anaconda mit Python?
  • Wie bekomme ich die Anzahl der Anfragen in der Warteschlange?
  • Python-Funktion verlangsamt sich mit Vorhandensein großer Liste
  • Setzen Sie den übergeordneten Schlüssel, aber nicht die untergeordnete Taste, während Sie den Endpunkt-Proto-Datenspeicher verwenden
  • Wie man den Wert in den ersten N Rows von der Gruppe in einem Multi-Index Pandas Dataframe aktualisiert?
  • Eclipse Python Integration
  • Catching http Fehler
  • Signalhandler und Protokollierung in Python
  • Pytest: Wie kann man den Rest der Tests in der Klasse überspringen, wenn man versagt hat?
  • Führen Sie mehrere Threads gleichzeitig aus
  • Holen Sie sich vollständige Liste aller möglichen Klassenattribute
  • 2 Solutions collect form web for “Setuptools plattformspezifische Abhängigkeiten”

    setup.py ist einfach ein Python-Skript. Sie können dynamische Abhängigkeiten in diesem Skript erstellen:

     import platform setup_requires = ['foo', 'bar'] if platform.system() == 'Windows': setup_requires.append('pyreadline') setup( # ... setup_requires=setup_requires, ) 

    Während die Antwort von Martijn Pieters damals völlig gültig war, hat sich Python-Verpackung seitdem viel verändert.

    Das bevorzugte Format, um Pakete zu verteilen, ist die Verwendung von Rädern *. Mit Rädern ist es nicht möglich, Python-Code während der Installation auszuführen.

    Rad verwenden Metadaten Version zwei wie in PEP 0427 spezifiziert. Umgebungsmarker können verwendet werden, um plattformspezifische Abhängigkeiten anzugeben.

    Setuptools erlaubt es, diese Umgebungsmarker als extras_require Schlüssel extras_require . Das folgende Beispielskript hängt von pyreadline für Windows-Systeme und auf pyxdg für Linux-Distributionen ab.

     #!/usr/bin/env python from setuptools import setup setup( name='spam', version='0.0.1', extras_require={ ':sys_platform == "win32"': [ 'pyreadline' ], ':"linux" in sys_platform': [ 'pyxdg' ] }) 

    * Auch freigeben ein sdist, so Plattformen, die nicht verwenden können Rad kann noch installieren Sie Ihr Paket.

    Python ist die beste Programmiersprache der Welt.