Frage

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

War es hilfreich?

Lösung

setup.py ist eine Python-Datei, die Sie in der Regel sagt, dass das Modul / Paket, das Sie im Begriff sind, zu installieren mit Distutils verpackt und verteilt wurde, die der Standard Python-Module für die Verteilung.

Dies ermöglicht Ihnen die einfache Python-Pakete zu installieren. Oft genug ist es zu schreiben:

$ pip install . 

pip wird setup.py verwenden Ihr Modul zu installieren. Vermeiden Sie rufen setup.py direkt an.

https://docs.python.org/3/installing/ index.html # Installation-Index

Andere Tipps

Es hilft, ein Python-Paket foo auf Ihrem Rechner zu installieren (auch in virtualenv sein kann), so dass Sie das Paket foo aus anderen Projekten importieren können und auch von [I] Python fordert.

Es tut die ähnliche Arbeit von pip, easy_install etc.


Mit setup.py

Lassen Sie uns mit einigen Definitionen beginnen:

Paket -. Ein Ordner / Verzeichnis, das __init__.py Datei enthält
Modul -. Eine gültige Python-Datei mit .py Erweiterung
Verteilung - Wie man Paket bezieht sich auf andere Pakete und Module .

Angenommen, Sie wollen ein Paket foo genannt installieren. Dann tun Sie,

$ git clone https://github.com/user/foo  
$ cd foo
$ python setup.py install

Stattdessen, wenn Sie nicht wollen, es tatsächlich installieren, aber noch möchte, es zu benutzen. Dann tun,

$ python setup.py develop  

Dieser Befehl wird Symlinks in das Quellverzeichnis innerhalb Website-Pakete anstelle des Kopierens Dinge erstellen. Aus diesem Grunde ist es ziemlich schnell (besonders für große Pakete).


Erstellen setup.py

Wenn Sie Ihr Paket Baum wie,

foo
├── foo
│   ├── data_struct.py
│   ├── __init__.py
│   └── internals.py
├── README
├── requirements.txt
└── setup.py

Dann haben Sie folgende Möglichkeiten in der setup.py Skript, so dass es auf einigen Maschine installiert werden:

from setuptools import setup

setup(
   name='foo',
   version='1.0',
   description='A useful module',
   author='Man Foo',
   author_email='foomail@foo.com',
   packages=['foo'],  #same as name
   install_requires=['bar', 'greek'], #external packages as dependencies
)

Stattdessen, wenn Ihr Paket Baum komplexere wie das unter:

foo
├── foo
│   ├── data_struct.py
│   ├── __init__.py
│   └── internals.py
├── README
├── requirements.txt
├── scripts
│   ├── cool
│   └── skype
└── setup.py

Dann setup.py in diesem Fall wäre wie:

from setuptools import setup

setup(
   name='foo',
   version='1.0',
   description='A useful module',
   author='Man Foo',
   author_email='foomail@foo.com',
   packages=['foo'],  #same as name
   install_requires=['bar', 'greek'], #external packages as dependencies
   scripts=[
            'scripts/cool',
            'scripts/skype',
           ]
)

Fügen Sie mehr Sachen (setup.py) & machen es anständig:

from setuptools import setup

with open("README", 'r') as f:
    long_description = f.read()

setup(
   name='foo',
   version='1.0',
   description='A useful module',
   license="MIT",
   long_description=long_description,
   author='Man Foo',
   author_email='foomail@foo.com',
   url="http://www.foopackage.com/",
   packages=['foo'],  #same as name
   install_requires=['bar', 'greek'], #external packages as dependencies
   scripts=[
            'scripts/cool',
            'scripts/skype',
           ]
)

Die long_description wird in pypi.org als README Beschreibung Ihres Pakets.


Und schließlich sind Sie nun bereit, Ihr Paket an PyPi.org hochladen, damit andere Ihr Paket installieren verwenden pip install yourpackage.

Der erste Schritt ist Ihr Paketnamen & Raum in pypi Anspruch mit:

$ python setup.py register

Sobald Ihr Paketnamen registriert ist, kann niemand behaupten, oder sie verwenden. Nach erfolgreicher Registrierung haben Sie Ihr Paket dort laden (in der Cloud) durch,

$ python setup.py upload

Optional können Sie auch Ihr Paket mit GPG unterzeichnen,

$ python setup.py --sign upload

Bonus : Sehen Sie eine Probe setup.py aus einem realen Projekt hier: torchvision-setup.py

setup.py ist Pythons Antwort auf einen Multi-Plattform-Installer und make Datei.

Wenn Sie mit Kommandozeilen-Installationen vertraut sind, dann übersetzt make && make install python setup.py build && python setup.py install.

Einige Pakete sind reine Python, und sind nur Byte zusammengestellt. Andere können enthalten nativen Code, der einen nativen Compiler erfordern (wie gcc oder cl) und ein Python-Schnittstellen-Modul (wie swig oder pyrex).

Wenn Sie Paket heruntergeladen, die „setup.py“ in Stammordner hat, können Sie es installieren, indem Sie

python setup.py install

Wenn Sie ein Projekt entwickeln und sich fragen, was diese Datei für sinnvoll ist, überprüfen Sie Python-Dokumentation auf Schreiben Sie das Setup-Script

setup.py ist ein Python-Skript, das in der Regel mit Bibliotheken oder Programmen versandt wird, in dieser Sprache geschrieben. Sein Zweck ist es die richtige Installation der Software ist.

Viele Pakete benutzen den distutils Rahmen in Verbindung mit setup.py.

http://docs.python.org/distutils/

setup.py kann in zwei Szenarien verwendet werden, zunächst möchten Sie ein Python-Paket installieren. Zweitens wollen Sie eigene Python-Paket erstellen. In der Regel Standard-Python-Paket hat einige wichtige Dateien wie setup.py, setup.cfg und Manifest.in. Wenn Sie das Python-Paket erstellen, diese drei Dateien den (Inhalt in PKG-INFO unter Ei-Info-Ordner) Name, Version, Beschreibung, andere erforderliche Installationen (in der Regel in TXT-Datei) und einige andere Parameter bestimmen. setup.cfg wird durch setup.py lesen, während Paket erstellt wird (könnte tar.gz sein). Manifest.in ist, wo können Sie festlegen, was in Ihrem Paket enthalten sein sollten. Sowieso können Sie Haufen Zeug zu tun mit setup.py 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 Haufen anderer Befehle, die mit setup.py verwendet werden könnten. Hilfe

python setup.py --help-commands

Wenn Sie den Download ein Paket mit setup.py öffnen Terminal (Mac, Linux) oder Eingabeaufforderung (Windows). Mit cd und helfen Sie mit Tab-Taste den Pfad rechts auf den Ordner, in dem Sie die Datei heruntergeladen haben, und wo es setup.py:

iMac:~ user $ cd path/pakagefolderwithsetupfile/

Drücken Sie die Eingabetaste, sollten Sie etwas wie diese:

iMac:pakagefolderwithsetupfile user$

Geben Sie dann nach diesem python setup.py install:

iMac:pakagefolderwithsetupfile user$ python setup.py install

Presse enter. Fertig!

ein Python-Paket installieren Sie heruntergeladen haben, extrahieren Sie das Archiv und starten Sie den setup.py-Skript innen:

python setup.py install

Für mich ist diese hat immer das Gefühl, seltsam. Es wäre natürlich einen Paket-Manager auf der Download-zu-Punkt, wie man in Ruby und NodeJS, zum Beispiel tun würde. gem install rails-4.1.1.gem

Ein Paket-Manager ist auch bequemer, weil es vertraut und zuverlässig ist. Auf der anderen Seite ist jeder setup.py Roman, weil es zu dem Paket spezifischen ist. Er fordert den Glauben an Konvention „Ich vertraue dieser setup.py die gleichen Befehle wie andere nimmt ich in der Vergangenheit verwendet haben“. Das ist eine bedauerliche Steuer auf geistige Willenskraft.

Ich sage nicht, das setup.py Workflow ist weniger sicher als eine Paket-Manager (Ich verstehe Pip läuft gerade die setup.py innen), aber auf jeden Fall das Gefühl, ich, es ist awkard und schrill. Es gibt eine Harmonie auf Befehle zur gleichen Paket-Manager-Anwendung alle. Man könnte sogar wachsen fond es.

setup.py ist eine Python-Datei wie jedes andere. Es kann einen beliebigen Namen nehmen, es sei denn durch Konvention wird es genannt setup.py so, dass es nicht ein anderes Verfahren mit jedem Skript ist.

Am häufigsten setup.py wird verwendet, um ein Python-Modul zu installieren, aber Server für andere Zwecke:

Module:

Vielleicht ist dies berühmteste Nutzung von setup.py in Modulen. Obwohl sie pip installiert werden, alte Python-Versionen nicht pip standardmäßig enthalten und sie benötigten separat installiert werden.

Wenn Sie ein Modul installieren wollten, aber wollten nicht pip installieren, nur um die einzige Alternative war das Modul aus setup.py Datei zu installieren. Dies könnte über python setup.py install erreicht. Dies würde das Python-Modul in dem Stamm Wörterbuch installieren (ohne pip, easy_install ect).

Diese Methode wird häufig verwendet, wenn pip fehl. Zum Beispiel, wenn die richtige Python-Version des gewünschten Pakets ist über pipperhaps nicht verfügbar, da es nicht mehr aufrechterhalten, um die Quelle herunterladen und python setup.py install laufen würde die gleichen, außer im Fall von kompilierten Binärdateien ausführen benötigt werden, (aber außer Acht lassen die Python-Version -Außer einen Fehler zurückgegeben).

Eine weitere Verwendung von setup.py ist ein Paket von der Quelle zu installieren. Wenn ein Modul noch in der Entwicklung werden die Rad-Dateien nicht zur Verfügung und die einzige Möglichkeit ist die Installation direkt von der Quelle zu installieren.

Gebäude Python-Erweiterungen:

Wenn ein Modul gebaut wurde kann es in Modul zur Verteilung bereit umgewandelt werden, um ein distutils mit Setup-Skript . Einmal gebaut diese installiert werden kann, über den Befehl.

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

Wieder einmal es benannt ist setup.py für einfache Bedienung und durch Konvention, sondern können einen beliebigen Namen nehmen.

Cython:

Eine andere berühmte Verwendung von setup.py Dateien umfassen Erweiterungen zusammengestellt. Diese erfordern einen Setup-Skript mit benutzerdefinierten Werten. Sie ermöglichen eine schnelle (aber einmal sind plattformabhängig kompiliert) Ausführung. 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 über python setup.py build kompiliert werden

Cx_Freeze:

Ein weiteres Modul ein Setup-Skript erforderlich ist cx_Freeze. Dieser wandelt Python-Skript ausführbare Dateien. Auf diese Weise können viele Befehle wie Beschreibungen, Namen, Symbole, die Pakete enthalten, ausschließen ect und einmal laufen wird eine Anwendung von verteilbar erzeugen. Ein Beispiel aus der 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 über python setup.py build kompiliert werden.

Was ist eine setup.py Datei?

Ganz einfach ist es ein Skript, das etwas in der Python-Umgebung oder konfiguriert baut.

Ein Paket, wenn verteilt sollte nur eine Setup-Skript enthalten, aber es ist nicht ungewöhnlich, mehrere zusammen in einen einzigen Setup-Skript zu kombinieren. Beachten Sie dies oft mit distutils aber nicht immer (wie ich in meinem letzten Beispiel gezeigt). Das ist daran zu erinnern, es konfiguriert nur Python-Paket / script in gewisser Weise.

Es nimmt den Namen so der gleiche Befehl immer verwendet werden kann, beim Bau oder einbauen.

Um es einfach zu machen, setup.py als "__main__" ausgeführt, wenn Sie den Anruf installieren Funktionen die anderen Antworten erwähnt. Innerhalb setup.py, sollten Sie alles, was das Paket installieren setzen benötigt.

Gemeinsame setup.py Funktionen

In den folgenden beiden Abschnitten werden zwei Dinge viele setup.py Module haben.

setuptools.setup

Mit dieser Funktion können Sie Projektattribute wie der Name der spezifizieren Projekt, die Version .... Am wichtigsten ist, diese Funktion ermöglicht es Ihnen, andere Funktionen zu installieren, wenn sie richtig verpackt sind. Siehe diese Webseite für ein Beispiel von setuptools.setup
Diese Attribute von setuptools.setup ermöglichen, diese Arten von Paketen zu installieren:

  • Pakete, die zu einem Projekt importiert werden und aufgeführt in PyPI mit setuptools.findpackages :

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

  • Pakete nicht in PyPI , kann aber von einer URL heruntergeladen werden unter Verwendung von dependency_links

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

Benutzerdefinierte Funktionen

In einer idealen Welt würde setuptools.setup alles für Sie. Leider ist dies nicht immer der Fall. Manchmal muss man bestimmte Dinge tun, wie Abhängigkeiten mit dem subprocess Befehl installieren, das System Sie installieren auf im richtigen Zustand für Ihr Paket zu erhalten. Versuchen Sie, dies zu vermeiden, bekommen diese Funktionen verwirrend und unterscheiden sich oft zwischen OS und sogar Verteilung .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top