Heim > Artikel > Backend-Entwicklung > Der einfachste Weg, Ihre „Requirements.txt“-Datei in Python zu extrahieren
Einführung:
Als Python-Entwickler ist die Verwaltung von Projektabhängigkeiten eine Routineaufgabe, die oft unbemerkt bleibt – bis sie es nicht mehr tut. Die Einfachheit von Pip Freeze > „requirements.txt“ kann ansprechend sein, aber in komplexeren Projekten kann es zu unerwarteten Problemen führen, die den Arbeitsablauf stören. Nachdem ich auf mehrere Hindernisse gestoßen bin, habe ich einen zuverlässigeren und verfeinerten Ansatz zum Verwalten von Abhängigkeiten entdeckt, den ich gerne mit Ihnen teilen möchte.
Das Problem mit dem Einfrieren von Pip:
Der Befehl pip freeze > „requirements.txt“ ist für viele Entwickler zur Standardpraxis geworden. Obwohl es in den meisten Fällen funktioniert, weist es einige erhebliche Nachteile auf:
Einschluss unnötiger Pakete: pip freeze erfasst alle installierten Pakete, einschließlich derjenigen, die automatisch als Abhängigkeiten anderer Pakete installiert wurden. Dies führt zu einer aufgeblähten Datei „requirements.txt“, die möglicherweise Pakete enthält, von denen Ihr Projekt nicht direkt abhängt.
Versionskonflikte: Die Einbeziehung automatisch installierter Abhängigkeiten kann manchmal zu Versionskonflikten führen, insbesondere wenn diese Abhängigkeiten für Ihr Projekt nicht notwendig sind, aber von anderen Paketen benötigt werden.
Umgebungsspezifische Probleme: Pip Freeze spiegelt den aktuellen Status Ihrer Umgebung wider, der möglicherweise Pakete enthält, die für bestimmte lokale Anforderungen installiert wurden, was zu Problemen bei der Replikation der Umgebung auf einem anderen Computer führen kann.
Auf die Hindernisse stoßen:
Ich bin diesen Problemen aus erster Hand begegnet, als ich versuchte, die Umgebung meines Projekts nachzubilden. Ich habe pip freeze verwendet, um eine „requirements.txt“-Datei zu generieren, aber als ich versuchte, diese Abhängigkeiten in einer neuen virtuellen Umgebung zu installieren, ist der folgende Fehler aufgetreten:
ERROR: Could not find a version that satisfies the requirement cloud-init==23.1.2 (from -r requirements.txt (line 13)) (from versions: none) ERROR: No matching distribution found for cloud-init==23.1.2 (from -r requirements.txt (line 13))
Dieser Fehler war frustrierend, da cloud-init ein Paket ist, das nie direkt von mir installiert wurde. Es wurde als Abhängigkeit eingezogen, aber pip freeze hat es erfasst, als wäre es ein erstklassiger Bürger meines Projekts.
Die Lösung finden:
Um diese Probleme anzugehen, bin ich zu einem verfeinerten Ansatz mit Pipreqs und Pip-Tools übergegangen. Hier ist der Schritt-für-Schritt-Prozess, der meine Probleme mit dem Abhängigkeitsmanagement gelöst hat:
Zuerst habe ich pipreqs und pip-tools installiert, die einen detaillierteren Ansatz für das Abhängigkeitsmanagement bieten:
pip install pipreqs pip-tools
Anstatt pip freeze zu verwenden, habe ich pipreqs verwendet, um eine Datei „requirements.in“ zu generieren, die nur die Pakete enthält, die direkt in meinem Projekt verwendet werden. Dadurch wird verhindert, dass unnötige Abhängigkeiten einbezogen werden:
pipreqs ./ --savepath requirements.in --force --ignore ./venv/,./test_venv/ --mode no-pin
Das macht jede Flagge:
Als nächstes habe ich pip-compile von pip-tools verwendet, um die endgültige „requirements.txt“-Datei zu generieren:
pip-compile
Durch diesen Schritt wird sichergestellt, dass nur die erforderlichen Paketversionen enthalten sind, sodass eine saubere und konfliktfreie „requirements.txt“-Datei bereitgestellt wird.
Zuletzt habe ich die Abhängigkeiten aus der neu generierten „requirements.txt“ installiert:
pip install -r requirements.txt
Dieser Ansatz führte zu einer schlankeren und besser verwaltbaren Datei „requirements.txt“, frei von unnötigen Paketen und Versionskonflikten.
Fazit:
Der Wechsel von Pip Freeze zu einem robusteren Abhängigkeitsverwaltungsprozess mit Pipreqs und Pip-Tools hat meinen Workflow grundlegend verändert. Es löste nicht nur die unmittelbaren Probleme, sondern gab mir auch eine bessere Kontrolle über die Abhängigkeiten meines Projekts.
Wenn Sie sich auf das Einfrieren von Pip verlassen haben und vor ähnlichen Herausforderungen stehen, empfehle ich Ihnen dringend, diesen Ansatz auszuprobieren. Es ist eine kleine Änderung, die einen großen Unterschied in der Stabilität und Portabilität Ihrer Python-Projekte machen kann.
Das obige ist der detaillierte Inhalt vonDer einfachste Weg, Ihre „Requirements.txt“-Datei in Python zu extrahieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!