1598 Stimmen

Was ist setup.py?

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

1183voto

Silfverstrom Punkte 26486

setup.py ist eine Python-Datei, deren Vorhandensein ein Hinweis darauf ist, dass das zu installierende Modul/Paket wahrscheinlich mit Distutils, dem Standard für die Verteilung von Python-Modulen, gepackt und verteilt wurde.

Damit können Sie Python-Pakete einfach installieren. Oft reicht es aus, zu schreiben:

$ pip install . 

pip wird verwendet setup.py um Ihr Modul zu installieren. Vermeiden Sie den Aufruf setup.py direkt.

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

805voto

kmario23 Punkte 49380

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

_Es erfüllt die gleiche Aufgabe wie pip , easy_install usw.,_


Verwendung von setup.py

Beginnen wir mit einigen Definitionen:

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

Nehmen wir an, Sie möchten ein Paket namens foo . Dann tun Sie es,

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

Wenn Sie die Software nicht installieren, aber dennoch verwenden möchten, können Sie dies tun. Dann tun Sie das,

$ python setup.py develop  

Dieser Befehl erstellt Symlinks auf das Quellverzeichnis innerhalb von site-packages, anstatt Dinge zu kopieren. Aus diesem Grund ist er recht schnell (besonders bei großen Paketen).


Erstellen von setup.py

Wenn Sie Ihr Paket Baum wie,

foo
 foo
    data_struct.py
    __init__.py
    internals.py
 README
 requirements.txt
 setup.py

Dann machen Sie folgendes in Ihrem setup.py Skript, damit es auf einem Rechner installiert werden kann:

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=['wheel', 'bar', 'greek'], #external packages as dependencies
)

Wenn Ihr Paketbaum jedoch komplexer ist, wie im folgenden Beispiel:

foo
 foo
    data_struct.py
    __init__.py
    internals.py
 README
 requirements.txt
 scripts
    cool
    skype
 setup.py

Dann, Ihr setup.py wäre in diesem Fall 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=['wheel', 'bar', 'greek'], #external packages as dependencies
   scripts=[
            'scripts/cool',
            'scripts/skype',
           ]
)

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

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=['wheel', 'bar', 'greek'], #external packages as dependencies
   scripts=[
            'scripts/cool',
            'scripts/skype',
           ]
)

El long_description wird verwendet in pypi.org als README-Beschreibung für Ihr Paket.


Und schließlich können Sie Ihr Paket auf die Website PyPi.org damit andere Ihr Paket installieren können, indem sie pip install yourpackage .

An diesem Punkt gibt es zwei Möglichkeiten.

  • veröffentlichen im vorübergehend test.pypi.org Server, um sich mit dem Verfahren vertraut zu machen, und veröffentlichen Sie es dann auf dem dauerhaft pypi.org Server, damit die Öffentlichkeit Ihr Paket nutzen kann.
  • sofort im Internet veröffentlichen dauerhaft pypi.org Server, wenn Sie mit dem Verfahren bereits vertraut sind und Ihre Anmeldedaten (z. B. Benutzername, Passwort, Paketname) haben

Sobald Ihr Paketname in pypi.org kann niemand sie beanspruchen oder verwenden. Python-Paketierung schlägt die Zwirn Paket für das Hochladen (Ihres Pakets auf PyPi). Daher,

(1) Der erste Schritt besteht darin, lokal bauen die Verteilungen verwenden:

# prereq: wheel (pip install wheel)  
$ python setup.py sdist bdist_wheel   

(2) dann mit twine zum Hochladen entweder auf test.pypi.org oder pypi.org:

$ twine upload --repository testpypi dist/*  
username: ***  
password: ***  

Es wird einige Minuten dauern, bis das Paket auf test.pypi.org erscheint. Sobald Sie damit zufrieden sind, können Sie Ihr Paket in den echten und permanenten Index von pypi.org einfach mit:

$ twine upload dist/*  

Optional können Sie die Dateien in Ihrem Paket auch mit einer GPG von:

$ twine upload dist/* --sign 

Bonus Lesung :

131voto

whatnick Punkte 5286

setup.py ist die Antwort von Python auf ein Multiplattform-Installationsprogramm und make Datei.

Wenn Sie mit Befehlszeileninstallationen vertraut sind, dann make && make install heißt übersetzt python setup.py build && python setup.py install .

Einige Pakete sind reines Python und werden nur bytekompiliert. Andere können nativen Code enthalten, der einen nativen Compiler erfordert (wie gcc o cl ) und ein Python-Schnittstellenmodul (wie swig o pyrex ).

66voto

Pēteris Caune Punkte 41322

Wenn Sie das Paket mit der Datei "setup.py" im Root-Ordner heruntergeladen haben, können Sie es installieren, indem Sie

python setup.py install

Wenn Sie ein Projekt entwickeln und sich fragen, wozu diese Datei nützlich ist, lesen Sie Python-Dokumentation zum Schreiben des Setup-Skripts

24voto

Ferdinand Beyer Punkte 61121

setup.py ist ein Python-Skript, das normalerweise mit Bibliotheken oder Programmen ausgeliefert wird, die in dieser Sprache geschrieben sind. Sein Zweck ist die korrekte Installation der Software.

Viele Pakete verwenden die distutils Rahmen in Verbindung mit setup.py .

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

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