Ausführliche Erklärung von requirements.txt und setup.py in Python

Nachgedruckt von: Deephub Imba

Die Verwaltung von Abhängigkeiten in einem Python-Projekt kann für Anfänger eine Herausforderung darstellen, ein Problem, das in der Vergangenheit beklagt wurde und wurde.

Im heutigen Artikel besprechen wir, wie Abhängigkeiten für Python-Projekte richtig verwaltet werden. Genauer gesagt wird der Zweck der Datei „requirements.txt“ besprochen und erläutert, wie mit setuptools ein benutzerdefiniertes Python-Paket verteilt und anderen Benutzern die weitere Verwendung und Entwicklung ermöglicht wird. Darüber hinaus wird der Zweck der Setup-Dateien (dh setup.cfg und setup.py) und deren Verwendung mit der Anforderungsdatei besprochen, was den Prozess der Paketentwicklung und -verteilung erleichtern kann.

99232b4893b8a7e7989fd36ed1891236.png

Was sind die Abhängigkeiten eines Python-Projekts?

Beginnen wir mit Paketabhängigkeiten; beschreiben Sie, was sie sind und wie Sie sie richtig verwalten, da dies die Wartung von Python-Projekten erleichtern kann.

Einfach ausgedrückt sind Abhängigkeiten andere externe Python-Pakete, von denen unser Python-Projekt abhängt.In der KI-Richtung sind die am häufigsten verwendeten Pakete beispielsweise Numpy und Pandas. In Python sind diese Abhängigkeiten normalerweise im Python Package Index (PyPI) oder anderen Verwaltungstools (z. B. Nexus) zu finden. Wir werden PyPI später als Beispiel verwenden, da es das am häufigsten verwendete Paketverwaltungstool ist, das jeder verwendet.

Jetzt muss unser eigenes Python-Projekt möglicherweise auf eine bestimmte Version eines Pakets eines Drittanbieters verweisen, das Abhängigkeiten hat. Diese Situation kann zu Abhängigkeitskonflikten führen, da alle unsere Abhängigkeiten (mindestens) zwei Abhängigkeiten haben, die möglicherweise von demselben Paket abhängen, aber jede eine bestimmte Version dieses externen Pakets erfordert (z. B. eine erfordert 1.0, während eine 2.0 erfordert). In diesem speziellen Fall müssen wir pip mitteilen, was mit Abhängigkeiten zu tun ist und welche spezifischen Versionen wir benötigen.

Im Allgemeinen benötigen wir „requirements.txt“, um die Abhängigkeiten und Versionen des Projekts anzugeben, also schauen wir uns zuerst das Format von „requirements.txt“ an

requirements.txt-Datei

requirements.txt ist eine Datei, die alle Abhängigkeiten eines Python-Projekts auflistet. Wie erwähnt, kann es auch Abhängigkeiten von Abhängigkeiten enthalten. Spalten können zusätzlich zum abhängigen Paketnamen eine bestimmte Version (mit ==), >= oder <= oder sogar beides angeben.

Beispiel für eine requirements.txt-Datei

matplotlib>=2.2
numpy>=1.15.0, <1.21.0
pandas
pytest==4.0.1

Diese Abhängigkeiten können dann über pip (normalerweise in einer virtuellen Umgebung) mit dem folgenden Befehl installiert werden:

pip install -r requirements.txt

Im obigen Beispiel haben wir einige Abhängigkeiten angegeben. Zum Beispiel wird pip für ein pandas-Paket, das keine zugehörige Version hat, die neueste Version normal installieren, es sei denn, eine der anderen Abhängigkeiten hat einen Konflikt damit (wenn es einen Konflikt gibt, installiert pip die neueste pandas-Version, die die Bedingungen erfüllt durch die verbleibenden Abhängigkeiten spezifiziert). Für pytest installiert der Paketmanager eine bestimmte Version (z. B. 4.0.1), während für matplotlib die neueste Version mindestens größer oder gleich 2.2 installiert wird (dies hängt wiederum davon ab, ob es andere Abhängigkeiten mit bestimmten Anforderungen gibt, z. wenn nicht, wird es mit der neuesten Version der Bedingungen installiert). Bei numpy-Paketen versucht pip, die neueste Version zwischen 1.15.0 (einschließlich) und 1.21.0 (exklusiv) zu installieren.

Nachdem alle Abhängigkeiten installiert sind, pip freezekönnen . Dieser Befehl listet alle Pakete und ihre spezifischen Versionen auf (dh ==).

requirements.txt ist sehr nützlich, aber nur für die Entwicklung und Veröffentlichung unseres Projekts (z. B. Online-Bereitstellung usw.). Wenn Sie Ihren Code für andere zur Verwendung in PyPI veröffentlichen möchten, benötigen Sie mehr als nur diese Datei.

Setuptools in Python

setuptools ist ein Paket, das auf distutils aufbaut und Entwicklern hilft, Python-Pakete schnell zu veröffentlichen. Unter anderem bietet es Funktionen, die das Abhängigkeitsmanagement erleichtern.

Wenn Sie ein Paket veröffentlichen möchten, müssen Sie normalerweise einige Metadaten eingeben, z. B. Paketname, Version, Abhängigkeiten, Einstiegspunkt usw. setuptools bietet Funktionen zur Vereinfachung dieser Vorgänge.

Projektmetadaten und andere Informationen müssen in der Datei setup.py definiert werden, wie z. B. in der folgenden Demo:

from setuptools import setup
setup(     
    name='demo',
    author='deephub',     
    version='0.1',     
    install_requires=[         
        'pandas',         
        'numpy',
        'matplotlib',
    ],
    # ... more options/metadata
)

Die von uns eingegebenen Informationen sind rein deklarativ, daher ist es besser, diese Metadaten und Informationen in einer Datei namens setup.cfg zu definieren und dann einfach setup() in der Datei setup.py aufzurufen. Die Datei setup.cfg sieht folgendermaßen aus:

[metadata]
name = demo
author = deephub
version = 0.1
[options]
install_requires =
    pandas
    numpy
    matplotlib

Dadurch bleibt minimaler Code in unserer setup.py-Datei:

from setuptools import setup
if __name__ == "__main__":
    setup()

Der Parameter install_requires oben ist ähnlich wie requirements.txt, Sie können die Operatoren <, >, <=, >=, == oder ! =, gefolgt von einer Versionskennung. Wenn das Projekt installiert wird, werden Abhängigkeiten heruntergeladen und gemäß dieser Konfiguration installiert.

Benötigen wir die Dateien requirements.txt und setup.py/setup.cfg?

Dies muss im Einzelfall behandelt werden. First between requirements.txt und setup.py wird normalerweise verwendet, um verschiedene Anforderungen zu implementieren:

  • Wenn es hauptsächlich für Projektentwicklungszwecke verwendet wird und nicht auf pypi veröffentlicht werden soll, ist requirements.txt ausreichend (auch wenn das Paket auf mehreren Computern entwickelt wird).

  • Wenn das Paket nur auf einer einzelnen Maschine entwickelt wird, aber als Pip-Paket für pypi freigegeben werden muss, dann ist setup.py/setup.cfg ausreichend.

  • Wenn das Paket auf mehreren Computern entwickelt wird und auf pypi veröffentlicht werden muss, sind dafür die Dateien requirements.txt (mehrere Computer benötigen dieselbe Entwicklungsumgebung) und setup.py/setup.cfg-Dateien (auf pypi veröffentlicht) erforderlich.

Ein weiterer Grund ist, dass, wenn Sie beide verwenden, die Datei setup.py (setup.cfg) eine Liste abstrakter Abhängigkeiten enthalten sollte, während die Datei requirements.txt spezifische Abhängigkeiten mit spezifischen Pins für jede Paketversion enthalten muss (verwenden Sie ==, um spezifische Abhängigkeiten Version).

Hier ist die offizielle Definition aus der Python-Dokumentation:

install_requires (dh setup.py ) definiert die Abhängigkeiten eines einzelnen Projekts, während requirements.txt normalerweise verwendet wird, um die vollständige Python-Umgebung zu definieren.

Obwohl install_requires nur wenige Anforderungen hat, enthält requirements.txt normalerweise eine erschöpfende Liste fester Versionen, um wiederholbare Installationen für eine vollständige Umgebung zu ermöglichen.

Von: https://packaging.python.org/en/latest/discussions/install-requires-vs-requirements/#requirements-files

Zusammenfassen

In diesem Artikel wird die Bedeutung einer ordnungsgemäßen Abhängigkeitsverwaltung bei der Entwicklung von Python-Projekten und -Anwendungen erörtert. Es beschreibt auch den Zweck der Datei requirements.txt und wie sie mit den setuptools-Konfigurationsdateien (d. h. setup.py und setup.cfg) verwendet wird, um sicherzustellen, dass andere Entwickler die Quellcode-Python-Pakete installieren, ausführen, entwickeln und sogar testen können .code.

setuptools ist kein vollständiger Ersatz für die Datei requirements.txt. Und in den meisten Fällen müssen diese beiden Dateien möglicherweise gleichzeitig vorhanden sein, damit Paketabhängigkeiten ordnungsgemäß verwaltet und Pakete veröffentlicht werden können.

Autor: Giorgos Myrianthous


Literatur-Empfehlungen:

Meine Rekrutierungsfreigabe für die Internetschule 2022

Mein Jahresrückblick 2021

Apropos Unterschied zwischen Algorithmus-Post und Entwicklungs-Post

Gehaltsübersicht für Rekrutierungsforschung und -entwicklung für Internetschulen

Für Zeitreihen alles, was Sie tun können.

Was ist das raumzeitliche Sequenzproblem? Welche Modelle werden hauptsächlich für solche Probleme verwendet? Was sind die Hauptanwendungen?

Öffentliche Nummer: KI-Schneckenauto

Bleiben Sie bescheiden, bleiben Sie diszipliniert, bleiben Sie fortschrittlich

e19e3cda943469338a193c36e6f40af8.png

Senden Sie [Schnecke], um eine Kopie von "Hands-on AI Project" (AI Snail Car) zu erhalten

Senden Sie [1222], um eine gute Leetcode-Brushing-Note zu erhalten

Senden Sie [AI Four Classics], um vier klassische KI-E-Books zu erhalten

Ich denke du magst

Origin blog.csdn.net/qq_33431368/article/details/123587593
Empfohlen
Rangfolge