1598 Stimmen

Was ist setup.py?

Kann mir bitte jemand erklären, was setup.py ist und wie es konfiguriert oder verwendet werden kann?

24voto

Avichal Badaya Punkte 3069

Setup.py kann in zwei Fällen verwendet werden: Erstens, wenn Sie ein Python-Paket installieren möchten. Zweitens, Sie wollen Ihr eigenes Python-Paket erstellen. Normalerweise hat ein Standard-Python-Paket einige wichtige Dateien wie setup.py, setup.cfg und Manifest.in. Wenn Sie ein Python-Paket erstellen, bestimmen diese drei Dateien (Inhalt in PKG-INFO unter dem egg-info-Ordner) den Namen, die Version, die Beschreibung, andere erforderliche Installationen (normalerweise in einer .txt-Datei) und einige andere Parameter. setup.cfg wird von setup.py gelesen, während das Paket erstellt wird (könnte tar.gz sein). Manifest.in ist der Ort, an dem Sie definieren können, was in Ihrem Paket enthalten sein soll. Auf jeden Fall kann man mit setup.py eine Menge Dinge tun, wie

python setup.py build
python setup.py install
python setup.py sdist <distname> upload [-r urltorepo]  (to upload package to pypi or local repo)

Es gibt eine Reihe von anderen Befehlen, die mit setup.py verwendet werden können.

python setup.py --help-commands

14voto

Xantium Punkte 10070

setup.py ist eine Python-Datei wie jede andere. Sie kann jeden Namen annehmen, außer dass sie per Konvention den Namen setup.py damit es nicht bei jedem Skript ein anderes Verfahren gibt.

Am häufigsten setup.py wird zur Installation eines Python-Moduls verwendet, dient aber auch anderen Zwecken:

Module:

Dies ist vielleicht die berühmteste Verwendung von setup.py besteht aus Modulen. Sie können zwar mit Hilfe von pip alte Python-Versionen enthielten keine pip standardmäßig und mussten separat installiert werden.

Wenn Sie ein Modul installieren möchten, aber nicht die pip war die einzige Alternative die Installation des Moduls von setup.py Datei. Dies könnte erreicht werden durch python setup.py install . Dies würde das Python-Modul in das Root-Wörterbuch installieren (ohne pip , easy_install ect).

Diese Methode wird häufig verwendet, wenn pip scheitern wird. Wenn zum Beispiel die richtige Python-Version des gewünschten Pakets nicht verfügbar ist über pip vielleicht, weil es nicht mehr gepflegt wird, , das Herunterladen des Quellcodes und die Ausführung python setup.py install würde dasselbe tun, außer wenn kompilierte Binärdateien erforderlich sind (aber die Python-Version wird ignoriert, es sei denn, es wird ein Fehler zurückgegeben).

Eine weitere Verwendung von setup.py ist es, ein Paket aus dem Quellcode zu installieren. Wenn sich ein Modul noch in der Entwicklung befindet, sind die wheel-Dateien nicht verfügbar und die einzige Möglichkeit zur Installation ist die direkte Installation aus dem Quellcode.

Erstellung von Python-Erweiterungen:

Wenn ein Modul erstellt wurde, kann es in ein verteilungsfähiges Modul umgewandelt werden, indem ein Skript zur Einrichtung von distutils . Nach der Erstellung können diese mit dem obigen Befehl installiert werden.

Ein Setup-Skript ist einfach zu erstellen, und sobald die Datei ordnungsgemäß konfiguriert wurde, kann sie durch Ausführen von python setup.py build (siehe Link für alle Befehle).

Auch hier lautet der Name setup.py der Einfachheit halber und aufgrund von Konventionen, kann aber jeden Namen annehmen.

Cython:

Eine weitere berühmte Verwendung von setup.py Dateien enthalten kompilierte Erweiterungen. Diese erfordern ein Setup-Skript mit benutzerdefinierten Werten. Sie ermöglichen eine schnelle Ausführung (sind aber nach der Kompilierung plattformabhängig). Hier ist ein einfaches Beispiel aus dem Dokumentation :

from distutils.core import setup
from Cython.Build import cythonize

setup(
    name = 'Hello world app',
    ext_modules = cythonize("hello.pyx"),
)

Dies kann kompiliert werden über python setup.py build

Cx_Freeze:

Ein weiteres Modul, das ein Setup-Skript erfordert, ist cx_Freeze . Damit werden Python-Skripte in ausführbare Dateien umgewandelt. Dies ermöglicht viele Befehle wie Beschreibungen, Namen, Symbole, einzuschließende oder auszuschließende Pakete usw. und erzeugt nach der Ausführung eine verteilbare Anwendung. Ein Beispiel aus dem Dokumentation :

import sys
from cx_Freeze import setup, Executable
build_exe_options = {"packages": ["os"], "excludes": ["tkinter"]} 

base = None
if sys.platform == "win32":
    base = "Win32GUI"

setup(  name = "guifoo",
        version = "0.1",
        description = "My GUI application!",
        options = {"build_exe": build_exe_options},
        executables = [Executable("guifoo.py", base=base)])

Dies kann kompiliert werden über python setup.py build .

Was also ist ein setup.py Datei?

Ganz einfach: Es ist ein Skript, das etwas in der Python-Umgebung aufbaut oder konfiguriert.

Wenn ein Paket verteilt wird, sollte es nur ein einziges Setup-Skript enthalten, aber es ist nicht ungewöhnlich, dass mehrere in einem einzigen Setup-Skript zusammengefasst werden. Beachten Sie, dass dies oft Folgendes beinhaltet distutils aber nicht immer (wie ich in meinem letzten Beispiel gezeigt habe). Die Sache zu erinnern, es konfiguriert nur Python-Paket/Skript in irgendeiner Weise.

Der Name wird übernommen, so dass beim Erstellen oder Installieren immer derselbe Befehl verwendet werden kann.

8voto

G M Punkte 17276

Wenn Sie ein Paket mit setup.py öffnen Sie Ihr Terminal (Mac, Linux) oder die Eingabeaufforderung (Windows). verwenden cd und hilft Ihnen mit der Schaltfläche Tab, den Pfad direkt zu dem Ordner zu setzen, in den Sie die Datei heruntergeladen haben und in dem sie sich befindet setup.py :

iMac:~ user $ cd path/pakagefolderwithsetupfile/

Drücken Sie die Eingabetaste, und Sie sollten etwa Folgendes sehen:

iMac:pakagefolderwithsetupfile user$

Geben Sie dann Folgendes ein python setup.py install :

iMac:pakagefolderwithsetupfile user$ python setup.py install

Presse enter . Erledigt!

7voto

mikeLundquist Punkte 650

Der Einfachheit halber wird setup.py wie folgt ausgeführt "__main__" wenn Sie die Funktionen installieren die anderen genannten Antworten. In der setup.py sollte alles enthalten sein, was zur Installation des Pakets benötigt wird.

Gemeinsame Funktionen von setup.py

Die folgenden zwei Abschnitte behandeln zwei Dinge, die viele setup.py Module haben.

setuptools.setup

Mit dieser Funktion können Sie Folgendes angeben Projektattribute wie der Name des Projekts, die Version.... Vor allem aber können Sie mit dieser Funktion andere Funktionen installieren, wenn sie richtig verpackt sind. Siehe diese Webseite für ein Beispiel von setuptools.setup

Diese Attribute von setuptools.setup ermöglichen die Installation dieser Arten von Paketen:

  • Pakete, die in Ihr Projekt importiert werden und in PyPI mit setuptools.findpackages :

    packages=find_packages(exclude=["docs","tests", ".gitignore", "README.rst","DESCRIPTION.rst"])

  • Pakete nicht in PyPI heruntergeladen werden, sondern kann von einer URL mit abhängigkeit_links

    dependency_links=["http://peak.telecommunity.com/snapshots/",]

Benutzerdefinierte Funktionen

In einer idealen Welt, setuptools.setup würde alles für Sie erledigen. Leider ist das nicht immer der Fall. Manchmal müssen Sie bestimmte Dinge tun, wie die Installation von Abhängigkeiten mit dem Unterprozess Befehl, um das System, auf dem Sie installieren, in den richtigen Zustand für Ihr Paket zu bringen. Versuchen Sie, dies zu vermeiden, denn diese Funktionen sind verwirrend und unterscheiden sich oft zwischen OS und sogar Vertrieb .

6voto

Colonel Panic Punkte 125419

Um ein heruntergeladenes Python-Paket zu installieren, entpacken Sie das Archiv und führen das darin enthaltene Skript setup.py aus:

python setup.py install

Für mich war das schon immer merkwürdig. Es wäre natürlicher, einen Paketmanager auf den Download zu richten, wie man es in Ruby und Nodejs tun würde, z.B.. gem install rails-4.1.1.gem

Ein Paketmanager ist auch bequemer, weil er vertraut und zuverlässig ist. Auf der anderen Seite ist jede setup.py ist neu, weil sie spezifisch für das Paket ist. Es erfordert Vertrauen in die Konvention "Ich vertraue darauf, dass diese setup.py die gleichen Befehle nimmt wie andere, die ich in der Vergangenheit verwendet habe". Das ist eine bedauerliche Belastung für die geistige Willenskraft.

Ich behaupte nicht, dass der setup.py-Workflow weniger sicher ist als ein Paketmanager (soweit ich weiß, führt Pip nur die setup.py aus), aber ich empfinde ihn als ungeschickt und störend. Es ist eine Harmonie, wenn die Befehle alle zur gleichen Paketmanager-Anwendung gehören. Man könnte sich sogar daran gewöhnen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X