Kann jemand bitte erklären, was setup.py
ist und wie es konfiguriert oder verwendet werden kann?
python
python-3.x
setup.py
pypi
python-packaging
Software-Enthusiasten
quelle
quelle
Antworten:
setup.py
ist eine Python-Datei, die Ihnen normalerweise mitteilt, dass das Modul / Paket, das Sie installieren möchten, mit Distutils gepackt und verteilt wurde. Dies ist der Standard für die Verteilung von Python-Modulen.Auf diese Weise können Sie Python-Pakete einfach installieren. Oft reicht es zu schreiben:
pip
verwendet setup.py, um Ihr Modul zu installieren. Vermeiden Sie es anzurufensetup.py
direkt .https://docs.python.org/3/installing/index.html#installing-index
quelle
setup.py
Datei erläutert wird .Es ist hilfreich, ein Python-Paket
foo
auf Ihrem Computer zu installieren (kann auch vorhanden seinvirtualenv
), damit Sie das Paketfoo
aus anderen Projekten und auch aus [I] Python-Eingabeaufforderungen importieren können .Es macht den ähnlichen Job
pip
,easy_install
usw.,Verwenden von
setup.py
Beginnen wir mit einigen Definitionen:
Paket - Ein Ordner / Verzeichnis, das eine
__init__.py
Datei enthält .Modul - Eine gültige Python-Datei mit der
.py
Erweiterung.Verteilung - Wie sich ein Paket auf andere Pakete und Module bezieht .
Angenommen, Sie möchten ein Paket mit dem Namen installieren
foo
. Dann tust du esStattdessen, wenn Sie es nicht tatsächlich installieren möchten, es aber dennoch verwenden möchten. Dann mach,
Dieser Befehl erstellt Symlinks zum Quellverzeichnis innerhalb von Site-Paketen, anstatt Dinge zu kopieren. Aus diesem Grund ist es ziemlich schnell (insbesondere für große Pakete).
Erstellen
setup.py
Wenn Sie Ihren Paketbaum mögen,
Anschließend führen Sie in Ihrem
setup.py
Skript Folgendes aus, damit es auf einem Computer installiert werden kann:Wenn Ihr Paketbaum komplexer ist als der folgende:
Dann wäre Ihr
setup.py
in diesem Fall wie folgt:Füge mehr Zeug zu (
setup.py
) hinzu und mache es anständig:Das
long_description
wird in pypi.org als README-Beschreibung Ihres Pakets verwendet.Und schließlich können Sie Ihr Paket jetzt auf PyPi.org hochladen, damit andere Ihr Paket mithilfe von installieren können
pip install yourpackage
.Der erste Schritt besteht darin, Ihren Paketnamen und Speicherplatz in pypi mit folgenden Angaben zu beanspruchen:
Sobald Ihr Paketname registriert ist, kann niemand ihn beanspruchen oder verwenden. Nach erfolgreicher Registrierung müssen Sie Ihr Paket dort (in die Cloud) hochladen durch,
Optional können Sie Ihr Paket auch mit unterschreiben
GPG
,Bonus : Sehen Sie hier ein Beispiel
setup.py
aus einem realen Projekt:torchvision-setup.py
quelle
requests
) hat dieses Projekt, um explizit ein gutes Beispiel für setup.py - github.com/kennethreitz/setup.pysetup.py
ist Pythons Antwort auf ein Installationsprogramm und einemake
Datei für mehrere Plattformen .Wenn Sie mit Befehlszeileninstallationen vertraut sind, wird in
make && make install
übersetztpython setup.py build && python setup.py install
.Einige Pakete sind reines Python und werden nur bytekompiliert. Andere enthalten möglicherweise nativen Code, für den ein nativer Compiler (wie
gcc
odercl
) und ein Python-Schnittstellenmodul (wieswig
oderpyrex
) erforderlich sind .quelle
python setup.py install
wird tatsächlichpython setup.py build
zuerst ausgeführt (Sie müssen sie also nur in bestimmten Fällen separat ausführen). Ich glaube, mussmake
immer manuell ausgeführt werden, bevor es ausgeführt wirdmake install
.make
keine spezifischen Parameter (oder Reihenfolge): Es liegt ganz beim Ersteller,Makefile
welche "Ziele" verfügbar sind (und in welcher Reihenfolge sie aufgerufen werden müssen). Da BareMakefile
s (normalerweise) nicht sehr portabel sind, werden sie in der Regel mit Befehlen wie./configure
(autotools) odercmake .
(cmake) generiert. Daher liegt es an diesen Programmen, zu definieren, ob Siemake
vorher explizit ausführen müssenmake install
oder nicht.Wenn Sie ein Paket heruntergeladen haben, dessen Stammordner "setup.py" enthält, können Sie es durch Ausführen installieren
Wenn Sie ein Projekt entwickeln und sich fragen, wofür diese Datei nützlich ist, lesen Sie die Python-Dokumentation zum Schreiben des Setup-Skripts
quelle
setup.py
ist ein Python-Skript, das normalerweise mit Bibliotheken oder Programmen geliefert wird, die in dieser Sprache geschrieben sind. Zweck ist die korrekte Installation der Software.Viele Pakete verwenden das
distutils
Framework in Verbindung mitsetup.py
.http://docs.python.org/distutils/
quelle
setup.py kann in zwei Szenarien verwendet werden: Erstens möchten Sie ein Python-Paket installieren. Zweitens möchten Sie Ihr eigenes Python-Paket erstellen. Normalerweise enthält das Standard-Python-Paket einige wichtige Dateien wie setup.py, setup.cfg und Manifest.in. Wenn Sie das Python-Paket erstellen, bestimmen diese drei Dateien den Namen, die Version, die Beschreibung, andere erforderliche Installationen (normalerweise in der TXT-Datei) und einige andere Parameter (Inhalt in PKG-INFO unter dem Ordner "info-info"). setup.cfg wird von setup.py gelesen, während das Paket erstellt wird (könnte tar.gz sein). In Manifest.in können Sie definieren, was in Ihrem Paket enthalten sein soll. Wie auch immer, Sie können eine Menge Dinge mit setup.py wie tun
Es gibt eine Reihe anderer Befehle, die mit setup.py verwendet werden können. für Hilfe
quelle
python setup.py --help-commands
. Sehr nützlich beim Stöbern in der setup.py.Wenn Sie ein Paket herunterladen,
setup.py
öffnen Sie Ihr Terminal (Mac, Linux) oder die Eingabeaufforderung (Windows). Mit dercd
Tabulatortaste können Sie den Pfad direkt zu dem Ordner festlegen, in den Sie die Datei heruntergeladen haben und in dem sich Folgendes befindetsetup.py
:Drücken Sie die Eingabetaste. Sie sollten ungefähr Folgendes sehen:
Geben Sie danach Folgendes ein
python setup.py install
:Drücken Sie
enter
. Erledigt!quelle
Um ein heruntergeladenes Python-Paket zu installieren, extrahieren Sie das Archiv und führen das Skript setup.py aus:
Für mich hat sich das immer seltsam angefühlt. Es wäre natürlicher, einen Paketmanager auf den Download zu verweisen, wie dies bei Ruby und Nodejs der Fall wäre, z.
gem install rails-4.1.1.gem
Ein Paketmanager ist auch komfortabler, weil er vertraut und zuverlässig ist. Auf der anderen Seite ist jedes neu
setup.py
, weil es spezifisch für das Paket ist. Es erfordert Vertrauen in die Konvention "Ich vertraue darauf, dass dieses setup.py dieselben Befehle wie andere verwendet, die ich in der Vergangenheit verwendet habe". Das ist eine bedauerliche Steuer auf geistige Willenskraft.Ich sage nicht, dass der setup.py-Workflow weniger sicher ist als ein Paketmanager (ich verstehe, dass Pip nur die setup.py im Inneren ausführt), aber ich bin sicher, dass es unangenehm und irritierend ist. Es gibt eine Harmonie zwischen Befehlen, die sich alle auf dieselbe Paketmanageranwendung beziehen. Sie könnten es sogar lieben.
quelle
setup.py
ist eine Python-Datei wie jede andere. Es kann einen beliebigen Namen annehmen, es sei denn, es wird konventionell benannt,setup.py
damit es nicht bei jedem Skript eine andere Prozedur gibt.Am häufigsten
setup.py
wird verwendet, um ein Python-Modul zu installieren, aber Server für andere Zwecke:Module:
Vielleicht ist dies die bekannteste Verwendung
setup.py
in Modulen. Obwohl sie mit installiert werden könnenpip
, waren alte Python-Versionenpip
standardmäßig nicht enthalten und mussten separat installiert werden.Wenn Sie ein Modul installieren wollten, aber nicht installieren wollten,
pip
bestand die einzige Alternative darin, das Modul aus einersetup.py
Datei zu installieren . Dies könnte über erreicht werdenpython setup.py install
. Dies würde das Python-Modul im Root-Wörterbuch installieren (ohnepip
,easy_install
ect).Diese Methode wird häufig verwendet, wenn
pip
ein Fehler auftritt. Wenn beispielsweise die richtige Python-Version des gewünschten Paketspip
möglicherweise nicht verfügbar ist, weil sie nicht mehr verwaltet wird, laden Sie die Quelle herunter und führen Sie sie auspython setup.py install
das Ausführen dasselbe ausführen, außer wenn kompilierte Binärdateien erforderlich sind (dies wird jedoch ignoriert Python-Version - sofern kein Fehler zurückgegeben wird).Eine andere Verwendung
setup.py
ist die Installation eines Pakets aus dem Quellcode. Wenn sich ein Modul noch in der Entwicklung befindet, sind die Raddateien nicht verfügbar. Die einzige Möglichkeit zur Installation besteht darin, sie direkt von der Quelle zu installieren.Erstellen von Python-Erweiterungen:
Wenn ein Modul erstellt wurde, kann es mithilfe eines Distutils-Setup-Skripts in ein Modul konvertiert werden, das zur Verteilung bereit ist . Einmal erstellt, können diese mit dem obigen Befehl installiert werden.
Ein Setup-Skript ist einfach zu erstellen und sobald die Datei richtig konfiguriert wurde und durch Ausführen kompiliert werden kann
python setup.py build
(siehe Link für alle Befehle).Wiederum ist es
setup.py
nach Benutzerfreundlichkeit und Konvention benannt, kann aber jeden Namen annehmen.Cython:
Eine weitere bekannte Verwendung von
setup.py
Dateien sind kompilierte Erweiterungen. Diese erfordern ein Setup-Skript mit benutzerdefinierten Werten. Sie ermöglichen eine schnelle (aber einmal kompilierte, plattformabhängige) Ausführung. Hier ist ein einfaches Beispiel aus der Dokumentation :Dies kann über kompiliert werden
python setup.py build
Cx_Freeze:
Ein weiteres Modul, das ein Setup-Skript erfordert, ist
cx_Freeze
. Dadurch wird das Python-Skript in ausführbare Dateien konvertiert. Auf diese Weise können viele Befehle wie Beschreibungen, Namen, Symbole und Pakete ect einschließen, ausschließen und nach der Ausführung eine verteilbare Anwendung erstellen. Ein Beispiel aus der Dokumentation :Dies kann über kompiliert werden
python setup.py build
.Was ist eine
setup.py
Datei?Ganz einfach, es ist ein Skript, das etwas in der Python-Umgebung erstellt oder konfiguriert.
Wenn ein Paket verteilt wird, sollte es nur ein Setup-Skript enthalten. Es ist jedoch nicht ungewöhnlich, mehrere zu einem einzigen Setup-Skript zu kombinieren. Beachten Sie, dass dies häufig,
distutils
aber nicht immer der Fall ist (wie ich in meinem letzten Beispiel gezeigt habe). Die Sache, an die man sich erinnern sollte, konfiguriert nur das Python-Paket / -Skript auf irgendeine Weise.Es wird der Name verwendet, sodass beim Erstellen oder Installieren immer derselbe Befehl verwendet werden kann.
quelle
Um es einfach zu machen, wird setup.py so ausgeführt, als würden
"__main__"
Sie beim Aufrufen der Installationsfunktionen die anderen genannten Antworten aufrufen . In setup.py sollten Sie alles einfügen, was Sie zur Installation Ihres Pakets benötigen.Allgemeine setup.py-Funktionen
In den folgenden beiden Abschnitten werden zwei Dinge erläutert, die viele setup.py-Module haben.
setuptools.setup
Mit dieser Funktion können Sie Projektattribute wie den Namen des Projekts, die Version usw. angeben . Am wichtigsten ist, dass Sie mit dieser Funktion andere Funktionen installieren können, wenn sie ordnungsgemäß verpackt sind. Auf dieser Webseite finden Sie ein Beispiel für setuptools.setup.
Diese Attribute von setuptools.setup ermöglichen die Installation der folgenden Pakettypen:
Pakete, die in Ihr Projekt importiert und mit setuptools.findpackages in PyPI aufgelistet werden :
packages=find_packages(exclude=["docs","tests", ".gitignore", "README.rst","DESCRIPTION.rst"])
Pakete nicht in PyPI , können aber mithilfe von dependency_links von einer URL heruntergeladen werden
dependency_links=["http://peak.telecommunity.com/snapshots/",]
Benutzerdefinierte Funktionen
In einer idealen Welt
setuptools.setup
würde alles für Sie erledigen. Dies ist leider nicht immer der Fall. Manchmal muss man bestimmte Dinge zu tun, wie Abhängigkeiten mit der Installation subprocess Befehl, um das System zu erhalten Sie auf im richtigen Zustand für Ihr Paket gerade installieren. Versuchen Sie dies zu vermeiden, diese Funktionen werden verwirrend und unterscheiden sich häufig zwischen Betriebssystem und gleichmäßiger Verteilung .quelle