setuptools.setup()
ruft auf distutils.core.setup()
und übergibt es **kwargs
als einzigen Parameter, sodass alle Schlüsselwörter, die distutils
akzeptiert werden, auch von akzeptiert werden setuptools
. Wenn wir schauendistutils
setup_keywords = ('distclass', 'script_name', 'script_args',
'options', 'name', 'version', 'author',
'author_email', 'maintainer', 'maintainer_email',
'url', 'license', 'description',
'long_description', 'keywords', 'platforms',
'classifiers', 'download_url', 'requires',
'provides', 'obsoletes',
)
Die meisten davon sind hier dokumentiert , aber einige sind nicht in der Tabelle enthalten: packages , package_dir , package_data , scripts , obsoletes , proviodes , py_modules und data_files .
Einige davon fehlen auch im setup_keywords
Tupel. Und wenn Sie danach setup_keywords
suchen, sieht es nicht so aus, als würde es tatsächlich irgendwo referenziert ... Aber das ist eine Geschichte für einen anderen Tag. Wie auch immer, hier ist die (hoffentlich vollständige) Liste.
distutils.core.setup () Schlüsselwortargumente
( Erforderlich : Name , Version und mindestens einer der Autoren oder Betreuer )
Autor:
Name des Paketautors (erforderlich, wenn kein Betreuer angegeben ist)
author_email:
E-Mail-Adresse des Paketautors
Klassifikatoren:
eine Liste der Klassifikatoren (siehe: https://pypi.org/classifiers/ )
Datendateien :
Mit dieser data_files
Option können zusätzliche Dateien angegeben werden, die von der Modulverteilung benötigt werden: Konfigurationsdateien, Nachrichtenkataloge, Datendateien, alles, was nicht in die vorherigen Kategorien passt.
data_files
Gibt eine Folge von (directory, files)
Paaren folgendermaßen an:
setup(...,
data_files=[('bitmaps', ['bm/b1.gif', 'bm/b2.gif']),
('config', ['cfg/data.cfg'])],
)
Jedes (directory, files)
Paar in der Sequenz gibt das Installationsverzeichnis und die dort zu installierenden Dateien an. Jeder Dateiname in Dateien wird relativ zum setup.py
Skript interpretiert .
Beschreibung:
kurze, zusammenfassende Beschreibung des Pakets
download_url:
Speicherort, an dem das Paket heruntergeladen werden kann
Schlüsselwörter:
eine Liste von Schlüsselwörtern (nimmt auch eine Zeichenfolge an. Wenn durch Kommas getrennt, wird diese in eine Liste aufgeteilt)
Lizenz:
Lizenz für das Paket (Nur verwenden, wenn die Lizenz nicht in den "Trove Classifiers" aufgeführt ist. Siehe: Classifiers)
Lange Beschreibung:
längere Beschreibung des Pakets, das von PyPI zum Erstellen der Projektseite verwendet wird
Betreuer:
Name des Paketverwalters (erforderlich, wenn der Autor nicht angegeben ist)
Betreuer_email:
E-Mail-Adresse des Paketbetreuers
Name:
Name des Pakets (erforderlich von distutils
)
veraltet :
Ein Paket kann mithilfe des obsoletes
Schlüsselwortarguments deklarieren, dass es andere Pakete veraltet . Der Wert hierfür ähnelt dem des requires
Schlüsselworts: Eine Liste von Zeichenfolgen, die Modul- oder Paketspezifizierer angeben. Jeder Bezeichner besteht aus einem Modul- oder Paketnamen, optional gefolgt von einem oder mehreren Versionsqualifizierern. Versionsqualifizierer werden in Klammern nach dem Modul- oder Paketnamen angegeben
package_data :
Paketdaten können Paketen mithilfe des package_data
Schlüsselwortarguments zur setup()
Funktion hinzugefügt werden . Der Wert muss eine Zuordnung vom Paketnamen zu einer Liste relativer Pfadnamen sein, die in das Paket kopiert werden sollen. Die Pfade werden als relativ zu dem Verzeichnis interpretiert, das das Paket enthält (Informationen aus der package_dir
Zuordnung werden gegebenenfalls verwendet). Das heißt, die Dateien werden voraussichtlich Teil des Pakets in den Quellverzeichnissen sein.
package_dir :
Wenn Sie eine andere Konvention verwenden, um Ihr Quellverzeichnis zu gestalten, ist dies kein Problem: Sie müssen nur die package_dir
Option angeben, um die Distutils über Ihre Konvention zu informieren. Angenommen, Sie behalten alle Python-Quellen unter lib
, sodass Module im „Root-Paket“ (dh überhaupt in keinem Paket) lib
, Module im foo
Paket in lib/foo
usw. enthalten sind. Dann würdest du setzen
package_dir = {'': 'lib'}
in Ihrem Setup-Skript. Die Schlüssel zu diesem Wörterbuch sind Paketnamen, und ein leerer Paketname steht für das Stammpaket. Die Werte sind Verzeichnisnamen relativ zu Ihrem Verteilungsstamm. In diesem Fall packages = ['foo']
versprechen Sie, wenn Sie sagen , dass die Datei lib/foo/__init__.py
vorhanden ist.
Eine andere mögliche Konvention besteht darin, das foo
Paket richtig einzulegen lib
, das foo.bar
Paket einzulegen lib/bar
usw. Dies würde im Setup-Skript als geschrieben
package_dir = {'foo': 'lib'}
Ein package: dir
Eintrag im package_dir
Wörterbuch gilt implizit für alle Pakete unter dem Paket, sodass der foo.bar
Fall hier automatisch behandelt wird. In diesem Beispiel werden packages = ['foo', 'foo.bar']
die Distutils angewiesen, nach lib/__init__.py
und zu suchen lib/bar/__init__.py
. ( package_dir
Beachten Sie, dass Sie , obwohl rekursiv, alle Pakete in Paketen explizit auflisten müssen: Die Distutils scannen Ihren Quellbaum nicht rekursiv nach einem Verzeichnis mit einer __init__.py
Datei.)
Pakete :
Paketdaten können Paketen mithilfe des package_data
Schlüsselwortarguments zur setup()
Funktion hinzugefügt werden . Der Wert muss eine Zuordnung vom Paketnamen zu einer Liste relativer Pfadnamen sein, die in das Paket kopiert werden sollen. Die Pfade werden als relativ zu dem Verzeichnis interpretiert, das das Paket enthält (Informationen aus der package_dir
Zuordnung werden gegebenenfalls verwendet). Das heißt, die Dateien werden voraussichtlich Teil des Pakets in den Quellverzeichnissen sein. Sie können auch Glob-Muster enthalten.
Plattformen:
eine Liste von Plattformen (Nimmt auch eine Zeichenfolge. Wenn durch Kommas getrennt, wird es in eine Liste aufgeteilt)
bietet :
Jetzt, da wir Abhängigkeiten angeben können, müssen wir auch angeben können, was wir für andere Distributionen bereitstellen können. Dies erfolgt mit dem provides
Schlüsselwortargument to setup()
.
py_modules :
Bei einer kleinen Modulverteilung ziehen Sie es möglicherweise vor, alle Module aufzulisten, anstatt Pakete aufzulisten - insbesondere bei einem einzelnen Modul, das in das „Root-Paket“ gehört (dh überhaupt kein Paket).
py_modules = ['foo.py']
Hier ist ein etwas komplizierteres Beispiel:
py_modules = ['mod1', 'pkg.mod2']
Dies beschreibt zwei Module, eines davon im "root" -Paket, das andere im pkg
Paket. Auch hier impliziert das Standardpaket- / Verzeichnislayout, dass diese beiden Module in mod1.py
und gefunden werden pkg/mod2.py
können und dass dies auch pkg/__init__.py
vorhanden ist. Auch hier können Sie die Paket- / Verzeichniskorrespondenz mit der package_dir
Option überschreiben .
Skripte :
Skripte sind Dateien mit Python-Quellcode, die über die Befehlszeile gestartet werden sollen. Für Skripte müssen Distutils keine sehr komplizierten Aufgaben ausführen. Die einzige clevere Funktion ist, dass #!
die Distutils die erste Zeile so anpassen, dass sie sich auf den aktuellen Interpreter-Speicherort bezieht , wenn die erste Zeile des Skripts mit dem Wort „Python“ beginnt und dieses enthält. Standardmäßig wird es durch den aktuellen Interpreter-Speicherort ersetzt. Mit der Option " --
Ausführbare Datei (oder -e
)" kann der Interpreterpfad explizit überschrieben werden.
Die Skriptoption ist einfach eine Liste von Dateien, die auf diese Weise behandelt werden sollen. Aus dem PyXML-Setup-Skript:
setup(...,
scripts=['scripts/xmlproc_parse', 'scripts/xmlproc_val']
)
URL:
Homepage für das Paket
Ausführung:
Version dieser Version (erforderlich von distutils
)
Schlüsselwortargumente setuptools.setup ()
Es gibt noch mehr Argumente, setuptools.setup()
die akzeptiert werden, als die, die von verwendet werden distutils
.
Obwohl es "Neue und geänderte Setup-Schlüsselwörter" heißt (was für mich ein Versionsänderungsprotokoll vorschlägt), heißt es im Intro-Text, dass dies "Schlüsselwortargumente für setup () [die von setuptools hinzugefügt oder geändert werden" sind, sodass ich glaube, dass der Link tatsächlich bereitstellt eine vollständige Liste. Ich werde es hier der Vollständigkeit halber hinzufügen.
(Seit setuptools.setup()
Aufrufen distutils.core.setup()
sind dieselben Parameter erforderlich : Name , Version und mindestens einer der Autoren oder Betreuer. )
convert_2to3_doctests:
Liste der Doctest-Quelldateien, die mit 2to3 konvertiert werden müssen. Weitere Informationen finden Sie unter Unterstützung von Python 2 und Python 3 mit Setuptools.
dependency_links:
Eine Liste von Zeichenfolgen mit URLs, nach denen gesucht werden soll, wenn Abhängigkeiten erfüllt werden. Diese Links werden bei Bedarf verwendet, um Pakete zu installieren, die durch setup_requires oder tests_require angegeben werden. Sie werden auch in die Metadaten des Eies geschrieben, damit sie von Tools wie EasyInstall zur Installation einer .egg-Datei verwendet werden können.
eifrige_Ressourcen:
Eine Liste von Zeichenfolgen, die Ressourcen benennen, die zusammen extrahiert werden sollen, wenn eine davon benötigt wird oder wenn im Projekt enthaltene C-Erweiterungen importiert werden. Dieses Argument ist nur nützlich, wenn das Projekt als Zip-Datei installiert wird und alle aufgelisteten Ressourcen als Einheit in das Dateisystem extrahiert werden müssen. Die hier aufgelisteten Ressourcen sollten '/' - getrennte Pfade relativ zum Quellstamm sein. Um eine Ressource foo.png im Paket bar.baz aufzulisten, würden Sie die Zeichenfolge bar / baz / foo.png in dieses Argument aufnehmen. Wenn Sie nur Ressourcen einzeln abrufen müssen oder keine C-Erweiterungen haben, die auf andere Dateien im Projekt zugreifen (z. B. Datendateien oder gemeinsam genutzte Bibliotheken), benötigen Sie dieses Argument wahrscheinlich NICHT und sollten nicht durcheinander kommen damit. Weitere Informationen zur Funktionsweise dieses Arguments finden Sie unter
Einstiegspunkte:
Ein Wörterbuch, das Eintrittspunktgruppennamen Zeichenfolgen oder Listen von Zeichenfolgen zuordnet, die die Einstiegspunkte definieren. Einstiegspunkte werden verwendet, um die dynamische Erkennung von Diensten oder Plugins zu unterstützen, die von einem Projekt bereitgestellt werden. Weitere Informationen und Beispiele zum Format dieses Arguments finden Sie unter Dynamische Ermittlung von Diensten und Plugins. Darüber hinaus wird dieses Schlüsselwort zur Unterstützung der automatischen Skripterstellung verwendet.
exclude_package_data:
Ein Wörterbuch, das Paketnamen Listen von Glob-Mustern zuordnet, die aus Ihren Paketverzeichnissen ausgeschlossen werden sollen. Sie können dies verwenden, um überschüssige Dateien, die in include_package_data enthalten sind, zurückzuschneiden. Eine vollständige Beschreibung und Beispiele finden Sie im folgenden Abschnitt zum Einschließen von Datendateien.
extras_require:
Ein Wörterbuch, das Namen von „Extras“ (optionale Funktionen Ihres Projekts) Zeichenfolgen oder Listen von Zeichenfolgen zuordnet und angibt, welche anderen Distributionen installiert werden müssen, um diese Funktionen zu unterstützen. Einzelheiten und Beispiele zum Format dieses Arguments finden Sie im folgenden Abschnitt zum Deklarieren von Abhängigkeiten.
include_package_data:
Wenn diese Option auf True gesetzt ist, werden setuptools angewiesen, automatisch alle Datendateien in Ihre Paketverzeichnisse aufzunehmen, die in Ihrer Datei MANIFEST.in angegeben sind. Weitere Informationen finden Sie im folgenden Abschnitt zum Einschließen von Datendateien.
install_requires:
Eine Zeichenfolge oder eine Liste von Zeichenfolgen, die angeben, welche anderen Distributionen installiert werden müssen, wenn dies der Fall ist. Einzelheiten und Beispiele zum Format dieses Arguments finden Sie im folgenden Abschnitt zum Deklarieren von Abhängigkeiten.
Namespace-Pakete:
Eine Liste von Zeichenfolgen, die die "Namespace-Pakete" des Projekts benennen. Ein Namespace-Paket ist ein Paket, das auf mehrere Projektverteilungen aufgeteilt werden kann. Das zope-Paket von Zope 3 ist beispielsweise ein Namespace-Paket, da Unterpakete wie zope.interface und zope.publisher möglicherweise separat verteilt werden. Das Ei-Laufzeitsystem kann solche Unterpakete zur Laufzeit automatisch zu einem einzigen übergeordneten Paket zusammenführen, sofern Sie sie in jedem Projekt deklarieren, das Unterpakete des Namespace-Pakets enthält, und solange die init .py des Namespace-Pakets keinen Code enthält andere als eine Namespace-Deklaration. Weitere Informationen finden Sie im folgenden Abschnitt zu Namespace-Paketen.
package_data:
Ein Wörterbuch, das Paketnamen Listen von Glob-Mustern zuordnet. Eine vollständige Beschreibung und Beispiele finden Sie im folgenden Abschnitt zum Einschließen von Datendateien. Sie müssen diese Option nicht verwenden, wenn Sie include_package_data verwenden, es sei denn, Sie müssen z. B. Dateien hinzufügen, die von Ihrem Setup-Skript und dem Erstellungsprozess generiert werden. (Und befinden sich daher nicht in der Quellcodeverwaltung oder sind Dateien, die Sie nicht in Ihre Quelldistribution aufnehmen möchten.)
project_urls:
Eine beliebige Zuordnung von URL-Namen zu Hyperlinks, die eine ausführlichere Dokumentation darüber ermöglicht, wo verschiedene Ressourcen zu finden sind, als die einfachen Optionen url und download_url bieten.
python_requires:
Eine Zeichenfolge, die einem Versionsspezifizierer (wie in PEP 440 definiert) für die Python-Version entspricht und zum Angeben des in PEP 345 definierten Requires-Python verwendet wird.
setup_requires:
Eine Zeichenfolge oder eine Liste von Zeichenfolgen, die angeben, welche anderen Distributionen vorhanden sein müssen, damit das Setup-Skript ausgeführt werden kann. setuptools versucht, diese zu erhalten (sogar so weit, dass sie mit EasyInstall heruntergeladen werden), bevor der Rest des Setup-Skripts oder der Befehle verarbeitet wird. Dieses Argument wird benötigt, wenn Sie distutils-Erweiterungen als Teil Ihres Erstellungsprozesses verwenden. Zum Beispiel Erweiterungen, die setup () - Argumente verarbeiten und in EGG-INFO-Metadatendateien umwandeln. (Hinweis: In setup_requires aufgeführte Projekte werden NICHT automatisch auf dem System installiert, auf dem das Setup-Skript ausgeführt wird. Sie werden einfach in das Verzeichnis ./.eggs heruntergeladen, wenn sie nicht bereits lokal verfügbar sind. Wenn Sie möchten, dass sie installiert werden Sie sollten nicht nur verfügbar sein, wenn das Setup-Skript ausgeführt wird, sondern auch zu install_requires und setup_requires hinzugefügt werden.)
test_loader:
Wenn Sie andere Methoden zum Ausführen von Tests als die normalerweise von setuptools verwendeten verwenden möchten, können Sie in diesem Argument einen Modulnamen und einen Klassennamen angeben. Die benannte Klasse muss ohne Argumente instanziierbar sein und ihre Instanzen müssen die loadTestsFromNames () -Methode unterstützen, wie sie in der TestLoader-Klasse des Python unittest-Moduls definiert ist. Setuptools besteht nur einen Testnamen im Namenargument: den Wert, der für das Argument test_suite angegeben wird. Der von Ihnen angegebene Loader kann diese Zeichenfolge beliebig interpretieren, da keine Einschränkungen hinsichtlich der in einer test_suite-Zeichenfolge enthaltenen Zeichenfolge bestehen. Der Modulname und der Klassenname müssen durch Folgendes getrennt werden :. Der Standardwert dieses Arguments ist "setuptools.command.test: ScanningLoader". Wenn Sie das Standardverhalten "unittest" verwenden möchten, können Sie "unittest: TestLoader" angeben. stattdessen als Ihr test_loader-Argument. Dies verhindert das automatische Scannen von Submodulen und Subpaketen. Das hier angegebene Modul und die Klasse können in einem anderen Paket enthalten sein, sofern Sie die Option tests_require verwenden, um sicherzustellen, dass das Paket mit der Loader-Klasse verfügbar ist, wenn der Testbefehl ausgeführt wird.
test_suite:
Eine Zeichenfolge, die eine unittest.TestCase-Unterklasse (oder ein Paket oder Modul, das eine oder mehrere von ihnen oder eine Methode einer solchen Unterklasse enthält) benennt oder eine Funktion benennt, die ohne Argumente aufgerufen werden kann und eine unittest.TestSuite zurückgibt. Wenn die benannte Suite ein Modul ist und das Modul über eine zusätzliche_tests () -Funktion verfügt, wird sie aufgerufen und die Ergebnisse werden zu den auszuführenden Tests hinzugefügt. Wenn die genannte Suite ein Paket ist, werden alle Submodule und Unterpakete rekursiv zur gesamten Testsuite hinzugefügt. Wenn Sie dieses Argument angeben, können Sie mit dem Befehl test die angegebene Testsuite ausführen, z. B. über setup.py test. Weitere Informationen finden Sie im Abschnitt zum Testbefehl unten.
tests_require:
Wenn für die Tests Ihres Projekts ein oder mehrere zusätzliche Pakete neben den für die Installation erforderlichen erforderlich sind, können Sie diese Option verwenden, um sie anzugeben. Es sollte eine Zeichenfolge oder eine Liste von Zeichenfolgen sein, die angeben, welche anderen Verteilungen vorhanden sein müssen, damit die Tests des Pakets ausgeführt werden können. Wenn Sie den Testbefehl ausführen, versucht setuptools, diese abzurufen (sogar so weit, dass sie mit EasyInstall heruntergeladen werden). Beachten Sie, dass diese erforderlichen Projekte nicht auf dem System installiert werden, auf dem die Tests ausgeführt werden, sondern nur dann in das Setup-Verzeichnis des Projekts heruntergeladen werden, wenn sie nicht bereits lokal installiert sind.
use_2to3:
Konvertieren Sie den Quellcode während des Erstellungsprozesses mit 2to3 von Python 2 nach Python 3. Weitere Informationen finden Sie unter Unterstützung von Python 2 und Python 3 mit Setuptools.
use_2to3_exclude_fixers :
Standardmäßig werden bei der Konvertierung alle Fixierer im lib2to3.fixers
Paket verwendet. Um zusätzliche Fixierer zu verwenden, kann der Parameter use_2to3_fixers
auf eine Liste von Namen von Paketen gesetzt werden, die Fixierer enthalten. Um Fixierer auszuschließen, kann der Parameter use_2to3_exclude_fixers
auf Fixierernamen gesetzt werden, die übersprungen werden sollen.
use_2to3_fixers :
Eine Liste von Modulen zur Suche nach zusätzlichen Fixierern, die während der 2to3-Konvertierung verwendet werden sollen. Weitere Informationen finden Sie unter Unterstützung von Python 2 und Python 3 mit Setuptools.
zip_safe:
Ein boolesches Flag (True oder False), das angibt, ob das Projekt sicher installiert und aus einer Zip-Datei ausgeführt werden kann. Wenn dieses Argument nicht angegeben wird, muss der Befehl bdist_egg jedes Mal, wenn ein Ei erstellt wird, den gesamten Inhalt Ihres Projekts auf mögliche Probleme analysieren.
Erweiterungen
Das Erstellen einer Erweiterung (anstelle eines reinen Python-Moduls) ist komplizierter, da Sie im Wesentlichen die erforderlichen Parameter und Argumente angeben müssen, um die Erweiterung erfolgreich aus C
Quelldateien zu erstellen. Dies erfolgt über das ext_modules
Schlüsselwort, das nichts anderes als eine Liste von Extension
Instanzen ist (aus denen importiert werden kann distutils.core
). Die vom Extension
Klassenkonstruktor akzeptierten Schlüsselwortargumente sind der Eingabevektor zum Festlegen der Erstellungsschritte zum Kompilieren der Erweiterung.
Da es sich bei dieser Frage setuptools.setup()
speziell um eine Frage handelt , werde ich nur die Definition von einschließen ext_modules
, aber die Dokumentation für die Extension
Klasse enthält alle Details. Der Vollständigkeit halber ist dies die Liste der akzeptierten Schlüsselwörter für den Extension
Konstruktor:
extension_keywords = ('name', 'sources', 'include_dirs',
'define_macros', 'undef_macros',
'library_dirs', 'libraries',
'runtime_library_dirs', 'extra_objects',
'extra_compile_args', 'extra_link_args',
'swig_opts', 'export_symbols', 'depends',
'language')
ext_modules :
Eine Liste von Erweiterungsinstanzen, von denen jede ein einzelnes Erweiterungsmodul beschreibt. Angenommen, Ihre Distribution enthält eine einzelne Erweiterung namens foo, die von foo.c. implementiert wird. Wenn keine zusätzlichen Anweisungen für den Compiler / Linker erforderlich sind, ist die Beschreibung dieser Erweiterung recht einfach:
from distutils.core import setup, Extension
setup(name='foo',
version='1.0',
ext_modules=[Extension('foo', ['foo.c'])],
)
Sonstiges
Schließlich gibt es noch mehr kwargs, die in setuptools.dist
und anderswo implementiert sind, aber aus irgendeinem Grund nie zu einer der Hauptdokumentationen zu setuptools / distutils hinzugefügt wurden:
Funktionen (veraltet):
Ein Wörterbuch, das Optionsnamen 'setuptools.Feature'-Objekten zuordnet. Features sind ein Teil der Distribution, der basierend auf Benutzeroptionen, Abhängigkeiten zwischen Features und Verfügbarkeit auf dem aktuellen System ein- oder ausgeschlossen werden kann. Ausgeschlossene Funktionen werden in allen Setup-Befehlen, einschließlich Quell- und Binärverteilungen, weggelassen, sodass Sie mehrere Verteilungen aus demselben Quellbaum erstellen können.
long_description_content_type (Per "Erstellen einer PyPI-freundlichen README-Datei ):
Legen Sie für das Markup Ihrer README-Datei einen akzeptierten Wert im Content-Type-Stil fest, z. B. text / plain, text / x-rst (für reStructuredText) oder text / markdown.
provides_extras (Per PEP566, gelistet als "Bietet-Extra" ):
Eine Zeichenfolge, die den Namen einer optionalen Funktion enthält. Muss eine gültige Python-Kennung sein. Kann verwendet werden, um eine Abhängigkeit davon abhängig zu machen, ob die optionale Funktion angefordert wurde.