Die kurze Antwort lautet, dass requirements.txt
nur die Paketanforderungen aufgelistet werden. setup.py
Auf der anderen Seite ähnelt es eher einem Installationsskript. Wenn Sie nicht vorhaben, den Python-Code zu installieren, benötigen Sie normalerweise nur requirements.txt
.
Die Datei setup.py
beschreibt zusätzlich zu den Paketabhängigkeiten die Gruppe von Dateien und Modulen, die gepackt (oder kompiliert werden sollen, im Fall von nativen Modulen (dh in C geschrieben)) und Metadaten, die zu den Python-Paketlisten hinzugefügt werden sollen ( zB Paketname, Paketversion, Paketbeschreibung, Autor, ...).
Da in beiden Dateien Abhängigkeiten aufgeführt sind, kann dies zu einer gewissen Duplizierung führen. Lesen Sie unten für Details.
Anforderungen.txt
Diese Datei listet die Anforderungen für Python-Pakete auf. Es ist eine einfache Textdatei (optional mit Kommentaren) , dass die Listen der Paketabhängigkeiten Ihrer Python - Projekt (eine pro Zeile). Es wird nicht beschrieben, wie Ihr Python-Paket installiert wird. Sie würden in der Regel die Anforderungsdatei mit verbrauchen pip install -r requirements.txt
.
Der Dateiname der Textdatei ist willkürlich, wird jedoch häufig requirements.txt
durch Konvention festgelegt. Wenn Sie Quellcode-Repositorys anderer Python-Pakete durchsuchen, stoßen Sie möglicherweise auf andere Namen wie dev-dependencies.txt
oder dependencies-dev.txt
. Diese dienen demselben Zweck wie dependencies.txt
zusätzliche Abhängigkeiten, die für Entwickler des jeweiligen Pakets von Interesse sind, jedoch im Allgemeinen, um den Quellcode (z. B. Pytest, Pylint usw.) vor der Veröffentlichung zu testen. Benutzer des Pakets benötigen im Allgemeinen nicht den gesamten Satz von Entwicklerabhängigkeiten, um das Paket auszuführen.
Wenn mehrere requirements-X.txt
Varianten vorhanden sind, listet normalerweise eine Laufzeitabhängigkeiten und die andere Build-Time- oder Testabhängigkeit auf. Einige Projekte kaskadieren auch ihre Anforderungsdatei, dh wenn eine Anforderungsdatei eine andere Datei enthält ( Beispiel ). Dies kann die Wiederholung verringern.
setup.py
Dies ist ein Python-Skript, das das setuptools
Modul verwendet, um ein Python-Paket zu definieren (Name, enthaltene Dateien, Paketmetadaten und Installation). Es werden requirements.txt
auch Laufzeitabhängigkeiten des Pakets aufgelistet. Setuptools ist die de-facto-Methode zum Erstellen und Installieren von Python-Paketen, weist jedoch Mängel auf, die im Laufe der Zeit zur Entwicklung neuer "Meta-Paket-Manager" wie pip geführt haben. Beispielhafte Mängel von setuptools sind die Unfähigkeit, mehrere Versionen desselben Pakets zu installieren, und das Fehlen eines Deinstallationsbefehls.
Wenn ein Python-Benutzer dies tut pip install ./pkgdir_my_module
(oder pip install my-module
), wird pip setup.py
in dem angegebenen Verzeichnis (oder Modul) ausgeführt. In ähnlicher Weise , die jedes Modul eine hat setup.py
kann pip
durch Ausführen -Installierte, zB pip install .
aus dem gleichen Ordner.
Brauche ich wirklich beides
Kurze Antwort ist nein, aber es ist schön, beides zu haben. Sie erfüllen unterschiedliche Zwecke, können jedoch beide zum Auflisten Ihrer Abhängigkeiten verwendet werden.
Es gibt einen Trick, den Sie in Betracht ziehen können, um zu vermeiden, dass Ihre Abhängigkeitsliste zwischen requirements.txt
und dupliziert wird setup.py
. Wenn Sie bereits ein voll funktionsfähiges setup.py
Paket für Ihr Paket geschrieben haben und Ihre Abhängigkeiten größtenteils extern sind, können Sie ein einfaches requirements.txt
mit nur den folgenden Optionen in Betracht ziehen :
# requirements.txt
#
# installs dependencies from ./setup.py, and the package itself,
# in editable mode
-e .
# (the -e above is optional). you could also just install the package
# normally with just the line below (after uncommenting)
# .
Dies -e
ist eine spezielle pip install
Option, mit der das angegebene Paket im bearbeitbaren Modus installiert wird . Wenn pip -r requirements.txt
diese Datei ausgeführt wird, installiert pip Ihre Abhängigkeiten über die Liste in ./setup.py
. Die bearbeitbare Option platziert einen Symlink in Ihrem Installationsverzeichnis (anstelle eines Eies oder einer archivierten Kopie). Entwickler können damit Code aus dem Repository bearbeiten, ohne ihn neu installieren zu müssen.
Sie können auch die sogenannten "Setuptools-Extras" nutzen, wenn Sie beide Dateien in Ihrem Paket-Repository haben. Sie können optionale Pakete in setup.py unter einer benutzerdefinierten Kategorie definieren und diese Pakete aus nur dieser Kategorie mit pip installieren:
# setup.py
from setuptools import setup
setup(
name="FOO"
...
extras_require = {
'dev': ['pylint'],
'build': ['requests']
}
...
)
und dann in der Anforderungsdatei:
# install packages in the [build] category, from setup.py
# (path/to/mypkg is the directory where setup.py is)
-e path/to/mypkg[build]
Dies würde alle Ihre Abhängigkeitslisten in setup.py behalten.
Hinweis : Normalerweise führen Sie pip und setup.py in einer Sandbox aus, z. B. mit dem Programm virtualenv
. Dadurch wird vermieden, dass Python-Pakete außerhalb des Kontexts der Entwicklungsumgebung Ihres Projekts installiert werden.