2013-07-18 5 views
14

Die Python-doc für „Das Schreiben des Setupscript (http://docs.python.org/2/distutils/setupscript.html) erwähnt, dass Abhängigkeiten unter Abschnitt angegeben werden könnenWie Abhängigkeiten angeben, wenn die setup.py-Datei für ein Python-Paket Erstellen

> 2.4. Relationships between Distributions and Packages

[...] These relationships can be specified using keyword arguments to the distutils.core.setup() function.

Dependencies on other Python modules and packages can be specified by supplying the requires keyword argument to setup(). The value must be a list of strings. Each string specifies a package that is required, and optionally what versions are sufficient.

To specify that any version of a module or package is required, the string should consist entirely of the module or package name. Examples include 'mymodule' and 'xml.parsers.expat'.

[...]

Vor diesem Hintergrund eher spärlich Informationen ohne ein Beispiel, das ich möchte nur sicherstellen, dass ich es richtig machen. Außerdem kann ich finde diese requires Parameter in der API-Beschreibung So ist es nicht http://docs.python.org/2/distutils/apiref.html#distutils.core.setup

getan wie dies zB

setup(name='MyStuff', 
     version='1.0', 
     requires='os, sys, progressbar', 
     [...] 

Ich hoffe, jemand kann mir ein bisschen mehr Einblick geben! Vielen Dank!

EDIT:

die distutils.core zu adressieren, Setuptools Kontroverse, könnte man einfach tun

try: 
    from setuptools import setup 
except ImportError: 
    from distutils.core import setup 

Ist es sinnvoll?

+1

Das gesamte Python-Verpackungssystem ist schlecht dokumentiert, hauptsächlich weil es so viele verschiedene Orte mit zum Teil sehr guten, aber widersprüchlichen Informationen gibt. Ich schaue mir immer bestehende Projekte an. Wenn Sie keine besonderen Bedürfnisse haben, brauchen Sie nur Distutils. Zum Beispiel ist Engpass hat ein gutes Beispiel für eine 'setup.py' Datei, die nur Distutils verwendet: https://github.com/kwwgoodman/bottleneck/blob/master/setup.py –

+0

@ Jan-PhilipGehrcke: Noch' Engpass' versäumt es anzugeben, dass es "numpy" in den Metadaten erfordert. 'setuptools' hat heutzutage viel bessere Dokumentation, dank der' distribute'-Gabel, die zusammengeführt wird: http://pythonhosted.org/setuptools/ –

+0

Richtig du bist, es beginnt sogar mit dem Import von numpy sofort. –

Antwort

19

Ignorieren distutils. Wenn Sie ein Paket erstellen möchten, das Abhängigkeiten für ein Tool wie pip angibt, um für Sie zu suchen und zu finden, müssen Sie stattdessen Ihre setup.py von setuptools basieren.

setuptools Abhängigkeiten werden in install_requires, aufgelistet, die eine Liste nimmt:

setup(name='MyStuff', 
     version='1.0', 
     install_requires=['progressbar'], 
     # ... 
) 

die Verteilungen ihrer eigenen sein sollte. os und sys sind Module in Python enthalten und sollte nicht aufgeführt werden.

+4

Ich hatte vor kurzem eine längere Diskussion darüber und wurde davon überzeugt, dass in der aktuellen Situation ein gutes Idiom ist "versuchen: von setuptools import setup; außer ImportError: from distutils.core import setup'. –

+0

@ Jan-PhilipGehrcke Nur ein FYI, dass "Setup" von 'distutils.core'' install_requires' nicht unterstützt. Wenn Sie also versuchen, es zu verwenden, sehen Sie eine Nachricht wie diese: */usr/lib/python3.4/distutils/dist.py: 260: UserWarning: Unbekannte Verteilungsoption: 'install_requires' *. Angesichts dieser und anderer Unterschiede halte ich das unter keinen Umständen für eine sehr gute Sprache. – Six