Was sind die Python-Entsprechungen zu Rubys Bundler / Perls Karton?

93

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 execUnterbefehl ( 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?

Riywo
quelle
4
Nein, nicht jeder Python-Benutzer verwendet virtualenv. Ich persönlich habe es nie gebraucht.
Fred Foo
Mir ist etwas genaues wie Ruby Bundler nicht bekannt (was ich bis jetzt nicht wusste, übrigens). Ich verwende sowohl virtualenv als auch pip und setuptools - oder distutils oder ein anderes Verteilungssystem, das ich zuerst in Google finde :) Ich bin auch neugierig auf eine Antwort, aber dies ist meistens meine Lösung.
Brandizzi
pipenvund shovelunten erwähnt sind modernere Entscheidungen, da diese Frage gestellt wurde.
Jim Meyer
Weder Pipenv noch Schaufel sind gleichwertig. Schaufel ist nichts wie Bündler, eher wie Rechen. Das Python-Abhängigkeitsmanagement liegt ziemlich weit zurück. Es wird in pip 1 Tag aber (verschmolzen werden pypi.org/project/pipfile ) ...
Nomas Prime

Antworten:

72

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:

  1. Pakete installieren (gem install)

    pip install mypackage
  2. 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:

    nose==1.1.2
    django<1.3
    PIL

    Wenn Sie diese Abhängigkeiten später installieren möchten, gehen Sie wie folgt vor:

    $ pip install -r requirements.txt

    Eine einfache Möglichkeit, alle Ihre aktuellen Pakete in der Syntax der Anforderungsdatei anzuzeigen, besteht darin, Folgendes zu tun:

    $ pip freeze

    Sie können mehr darüber lesen Sie hier .

  3. 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:

    $ pip install gunicorn
    $ gunicorn -h 
  4. Paket-Edelsteine ​​für die Installation aus dem Cache (Bundler-Paket)

    Es gibt pip bundleund pip 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.

Verweigert Shabalin
quelle
46
Das Tolle an Bundler ist genau, dass der virtualenv- Teil integriert ist und in den meisten Fällen keine Administratorrechte erforderlich sind. In der Tat kann Bundle das einzige Juwel sein, das man weltweit braucht. bundle install --path vendorinstalliert alles lokal und bundle execist klug genug, um das herauszufinden. Keine expliziten Umgebungsänderungen erforderlich.
Debilski
11
Ich denke nicht, dass Punkt 3 richtig ist. Das einfache Ausführen einer ausführbaren Ruby-Datei kann mit oder ohne erfolgen bundle exec. Der springende Punkt bundle execist, dass es die Umgebung wie Gemfilevor dem Ausführen der ausführbaren Datei ändert . Pip hat kein Äquivalent zu bundle exec, obwohl virtualenv dies könnte.
Sean Mackesey
@SeanMackesey Wenn Sie die Aktivierung der virtualenv-Umgebung ausführen, werden Sie sofort innerhalb der Umgebung, z. B. Python zeigt auf die in der Umgebung, nicht global installierte. Pythonpath ist in Bezug auf env korrekt. Alle Apps werden auch in dieser Umgebung ausgeführt.
Denys Shabalin
8
Die Hauptsache bei Bundler ist, dass es jetzt ein Defacto-Standard ist. Sie können so ziemlich garantieren, dass JEDES Ruby-Projekt praktisch jeder Größe einen GemfileSitz in seiner Wurzel hat, und Sie können bundle installund Sie können loslegen, oder bundle --deploymentund 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.
ocodo
14

Sie können pipenv verwenden , das eine ähnliche Schnittstelle zum Bundler hat.

$ pip install pipenv

Pipenv erstellt virtualenv automatisch und installiert Abhängigkeiten von Pipfileoder Pipfile.lock.

$ pipenv --three           # Create virtualenv with Python3
$ pipenv install           # Install dependencies from Pipfile
$ pipenv install requests  # Install `requests` and update Pipfile
$ pipenv lock              # Generate `Pipfile.lock`
$ pipenv shell             # Run shell with virtualenv activated

Sie können einen Befehl mit virtualenv scope wie ausführen bundle exec.

$ pipenv run python3 -c "print('hello!')"
Nonylen
quelle
3

Es gibt einen Klon- Pbundler .

Die Version, die sich derzeit in pip befindet, liest einfach die requirements.txtDatei, die Sie bereits haben, ist aber viel veraltet. Es ist auch nicht ganz gleichwertig: Es besteht darauf, eine zu machen virtualenv. 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).

Kousu
quelle
Dieses Projekt scheint verschwunden zu sein. Betrachten Sie Poesie: stackoverflow.com/a/61771381/115075
bb.
1

Ich habe einen geschrieben - https://github.com/Deepwalker/pundler . Auf PIP pundlewurde der Name bereits vergeben.

Es verwendet requirements(_\w+)?.txtDateien als gewünschte Abhängigkeiten und erstellt frozen(_\w+)?.txtDateien mit eingefrorenen Versionen.

Über (_\w+)?Sache - das ist envs. Sie können die PUNDLEENV=testDatei "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.

Mihail Krivushin
quelle
1

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.

Jim Meyer
quelle
1

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).

bb.
quelle
0

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).

Yonsy Solis
quelle