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.

  • Appscript auf OSX 10.6.3 / Python 2.6.1
  • Migration von verteilen auf setuptools
  • Wie bekomme ich Argumente an setup.py aus Pip mit '--install-option'?
  • Ausschluss von Quelldateien aus aufgebauter rpm-Verteilung mit setuptool
  • Kann die Installations-Abhängigkeiten, die in setup.py nicht zur Installationszeit angegeben sind, pippen?
  • Py2app abholen .git subdir eines Pakets während des Aufbaus
  • Python setuptool Wie kann ich Abhängigkeit von libxml2-dev und libxslt1-dev hinzufügen?
  • Nicht setup.py entwickeln Gebrauchsrad für install_requires?
  • 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.