Ich kenne mich mit virtualenv und pip aus. Diese unterscheiden sich jedoch etwas von Bündler / Karton.
Zum Beispiel:
- pip schreibt den absoluten Pfad zu shebang oder aktiviert das Skript
- pip hat den
exec
Unterbefehl (bundle exec bar
) nicht - virtualenv kopiert den Python-Interpreter in ein lokales Verzeichnis
Verwendet jeder Python-Entwickler virtualenv / pip? Gibt es andere Paketverwaltungstools für Python?
pipenv
undshovel
unten erwähnt sind modernere Entscheidungen, da diese Frage gestellt wurde.Antworten:
Nach dem, was ich über Bundler gelesen habe, sollte Pip ohne Virtualenv für Sie gut funktionieren. Sie können sich das als etwas zwischen regulärem Edelsteinbefehl und Bündler vorstellen. Allgemeine Dinge, die Sie mit pip tun können:
Pakete installieren (gem install)
Abhängigkeiten und Masseninstallation (gemfile)
Der wahrscheinlich einfachste Weg ist die Verwendung der Anforderungen.txt-Dateien von pip. Grundsätzlich handelt es sich nur um eine einfache Liste der erforderlichen Pakete mit möglichen Versionsbeschränkungen. Es könnte ungefähr so aussehen:
Wenn Sie diese Abhängigkeiten später installieren möchten, gehen Sie wie folgt vor:
Eine einfache Möglichkeit, alle Ihre aktuellen Pakete in der Syntax der Anforderungsdatei anzuzeigen, besteht darin, Folgendes zu tun:
Sie können mehr darüber lesen Sie hier .
Ausführung (Bundler Exec)
Alle Python-Pakete, die mit ausführbaren Dateien geliefert werden, sind normalerweise direkt nach der Installation verfügbar (es sei denn, Sie haben ein benutzerdefiniertes Setup oder es handelt sich um ein spezielles Paket). Beispielsweise:
Paket-Edelsteine für die Installation aus dem Cache (Bundler-Paket)
Es gibt
pip bundle
undpip zip/unzip
. Aber ich bin mir nicht sicher, ob viele Leute es benutzen.ps Wenn Sie sich für die Isolation der Umgebung interessieren, können Sie virtualenv auch zusammen mit pip verwenden (sie sind enge Freunde und arbeiten perfekt zusammen). Standardmäßig installiert pip systemweit Pakete, für die möglicherweise Administratorrechte erforderlich sind.
quelle
bundle install --path vendor
installiert alles lokal undbundle exec
ist klug genug, um das herauszufinden. Keine expliziten Umgebungsänderungen erforderlich.bundle exec
. Der springende Punktbundle exec
ist, dass es die Umgebung wieGemfile
vor dem Ausführen der ausführbaren Datei ändert . Pip hat kein Äquivalent zubundle exec
, obwohl virtualenv dies könnte.Gemfile
Sitz in seiner Wurzel hat, und Sie könnenbundle install
und Sie können loslegen, oderbundle --deployment
und es. ' Ich werde nur auf einem Server laufen, der sonst wenig zu tun hat, vorausgesetzt, der Computer verfügt über die erforderliche Ruby-Version. Python hat einfach kein Äquivalent. Die Werkzeuge sind da, die kulturelle Allgegenwart nicht.Sie können pipenv verwenden , das eine ähnliche Schnittstelle zum Bundler hat.
Pipenv erstellt virtualenv automatisch und installiert Abhängigkeiten von
Pipfile
oderPipfile.lock
.Sie können einen Befehl mit virtualenv scope wie ausführen
bundle exec
.quelle
Es gibt einen Klon- Pbundler .
Die Version, die sich derzeit in pip befindet, liest einfach die
requirements.txt
Datei, die Sie bereits haben, ist aber viel veraltet. Es ist auch nicht ganz gleichwertig: Es besteht darauf, eine zu machenvirtualenv
. Ich stelle fest, dass Bundler nur die fehlenden Pakete installiert und Ihnen die Möglichkeit gibt, Ihr sudo-Passwort für die Installation in Ihren Systemverzeichnissen anzugeben oder neu zu starten, was anscheinend keine Funktion von pbundler ist.Die Version auf git ist jedoch eine fast vollständige Neufassung, um Bundlers Verhalten viel näher zu kommen ... einschließlich einer "Cheesefile" und der jetzt nicht unterstützenden Anforderung.txt. Dies ist bedauerlich, da anforderungs.txt der De-facto-Standard in Pythonland ist und es sogar offizielle BDFL-gestempelte Arbeiten gibt, um ihn zu standardisieren . Wenn dies in Kraft tritt, können Sie sicher sein, dass so etwas wie pbundler zum De-facto-Standard wird. Leider noch nichts Stabiles, von dem ich weiß (aber ich würde gerne das Gegenteil beweisen).
quelle
Ich habe einen geschrieben - https://github.com/Deepwalker/pundler . Auf PIP
pundle
wurde der Name bereits vergeben.Es verwendet
requirements(_\w+)?.txt
Dateien als gewünschte Abhängigkeiten und erstelltfrozen(_\w+)?.txt
Dateien mit eingefrorenen Versionen.Über
(_\w+)?
Sache - das ist envs. Sie können diePUNDLEENV=test
Datei "resources_test.txt" erstellen und diese Deps dann in Ihrem Lauf mit den Depersions.txt verwenden.Und über virtualenv - Sie brauchen keine, es ist das, was Pundle vom Bundler im ersten Kopf nimmt.
quelle
Ich würde sagen, Schaufel ist einen Blick wert. Es wurde speziell für die Python-Version von Rake entwickelt. Es gibt nicht viel Commit-Aktivität für das Projekt, aber es scheint stabil und nützlich zu sein.
quelle
Python Poetry ist Ruby Bundler ab 2020 (und bereits seit 2018) am nächsten. Es ist bereits mehr als zwei Jahre alt, immer noch sehr aktiv und hat eine großartige Dokumentation. Man könnte sich darüber beschweren, dass
curl-pipe-python
-style die empfohlene Art der Installation ist, aber es gibt Alternativen, z. B. Homebrew unter MacOS.Es verwendet virtuelle Umgebungen hinter den Kulissen (im Gegensatz zu Bundler), stellt jedoch eine Sperrdatei bereit und verwendet diese, kümmert sich um Unterabhängigkeiten, hält bestimmte Versionsbeschränkungen ein und ermöglicht die automatische Aktualisierung veralteter Pakete. Es gibt sogar eine automatische Vervollständigung für Ihre Lieblings-Shell.
Mit der Verwendung einer pyproject.toml-Datei geht es auch ein bisschen weiter als Bundler (näher an einer Gemspec. Es ist auch vergleichbar mit npm und Garn von JavaScript und TypeScript).
Poetrify (ein ergänzendes Projekt) hilft beim Konvertieren von Projekten von require.txt in pyproject.toml für Poetry.
Die Sperrdatei kann von in die Datei resources.txt exportiert werden
poetry export -f requirements.txt > requirements.txt
, wenn Sie diese für andere Werkzeuge benötigen (oder wenn der unwahrscheinliche Fall zurückgehen möchte).quelle
Nein, nein, alle Entwickler verwenden virtualenv und / oder pip, aber viele Entwickler verwenden / bevorzugen diese Tools
Und jetzt für Paketentwicklungstools und verschiedene Umgebungen ist das Ihre eigentliche Frage. Bestehen Sie andere Tools wie Buildout ( http://www.buildout.org/en/latest/ ) für denselben Zweck. Isolieren Sie das Python-Build-System Ihrer Umgebung für jedes von Ihnen verwaltete Projekt. Seit einiger Zeit benutze ich das, aber jetzt nicht mehr.
Unabhängige Umgebungen pro Projekt in Python unterscheiden sich ein wenig von der gleichen Situation in Ruby. In meinem Fall verwende ich pyenv ( https://github.com/yyuu/pyenv ), das ist so etwas wie rbenv, aber für Python. Verschiedene Versionen von Python und Virtualenvs pro Projekt, und in diesen isolierten Umgebungen kann ich Pip verwenden oder einfach installieren (falls erforderlich).
quelle