it-swarm.com.de

Was sind die Python-Entsprechungen für Rubys Bundler/Perl-Karton?

Ich kenne Virtualenv und Pip. Diese unterscheiden sich jedoch etwas von Bundler/Karton.

Zum Beispiel:

  • pip schreibt den absoluten Pfad nach Shebang oder aktiviert das Skript
  • pip hat nicht den Unterbefehl exec (bundle exec bar)
  • virtualenv kopiert den Python-Interpreter in ein lokales Verzeichnis

Verwendet jeder Python-Entwickler virtualenv/pip? Gibt es andere Paketverwaltungstools für Python?

87
riywo

Nach allem, was ich über Bundler-Pip ohne Virtualenv gelesen habe, sollte es für Sie funktionieren. Sie können es als etwas zwischen regulärem Edelsteinbefehl und Bündler vorstellen. Allgemeine Dinge, die Sie mit pip machen können:

  1. Pakete installieren (gem install)

    pip install mypackage
    
  2. Abhängigkeiten und Masseninstallation (gemfile)

    Der einfachste Weg ist wahrscheinlich die Verwendung der Datei Pipes Requirements.txt. Im Grunde ist es nur 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
    

    Später, wenn Sie diese Abhängigkeiten installieren möchten, würden Sie Folgendes tun:

    $ pip install -r requirements.txt
    

    Sie können alle Ihre aktuellen Pakete in der Anforderungsdatei-Syntax auf einfache Weise anzeigen:

    $ pip freeze
    

    Sie können mehr darüber lesen 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 ist ein spezielles Paket). Zum Beispiel:

    $ pip install gunicorn
    $ gunicorn -h 
    
  4. Paket-Gems für die Installation vom Cache (Bundler-Paket)

    Es gibt pip bundle und pip Zip/unzip. Ich bin mir jedoch nicht sicher, ob viele Leute es benutzen.

p.s. 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 Pakete systemweit, für die möglicherweise Administratorrechte erforderlich sind. 

69
Denys Shabalin

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

$ pip install pipenv

Pipenv erstellt automatisch eine Virtualenv und installiert Abhängigkeiten von Pipfile oder 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 den Befehl mit einem virtualenv-Bereich wie bundle exec ausführen.

$ pipenv run python3 -c "print('hello!')"
12
nonylene

Es gibt einen Klon pbundler .

Die Version, die gerade in pip ist, liest einfach das requirements.txt Datei, die Sie bereits haben, aber viel veraltet ist. Es ist auch nicht ganz gleichwertig: Es besteht darauf, ein virtualenv zu erstellen. Ich stelle fest, dass Bundler nur die fehlenden Pakete installiert und Ihnen die Möglichkeit bietet, Ihr Sudo-Kennwort für die Installation in Ihren Systemverzeichnissen anzugeben oder einen Neustart durchzuführen, was bei pbundler anscheinend kein Merkmal ist.

Die Version auf git ist jedoch eine fast vollständige Neufassung, um Bundlers Verhalten viel näher zu sein ... einschließlich eines "Cheesefiles" und der Tatsache, dass die Datei "requirements.txt" jetzt nicht unterstützt wird. Dies ist bedauerlich, da requirements.txt der De-facto-Standard in Pythonland ist und es sogar offizielle BDFL-Stempel gibt, um standardisieren . Wenn das in Kraft tritt, können Sie sicher sein, dass so etwas wie pbundler zum De-facto-Standard wird. Leider ist noch nichts ziemlich stabiles bekannt (aber ich würde gerne als falsch erwiesen werden).

4
kousu

Ich schrieb einen - https://github.com/Deepwalker/pundler . Auf PIP wurde dessen pundle-Name bereits vergeben.

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

Über (_\w+)? Ding - das ist envs. Sie können die Anforderungen_test.txt erstellen und anschließend PUNDLEENV=test verwenden, um diese Deps in Ihrem Lauf mit den Anforderungen von Requirements.txt zu verwenden.

Und über Virtualenv - Sie brauchen nicht eins, sondern das, was Bundle in erster Linie vom Bündler nimmt.

1

Ich würde sagen, Shovel ist einen Blick wert. Es wurde speziell für die Pythonish-Version von Rake entwickelt. Es gibt keine Menge Commit-Aktivitäten für das Projekt, scheint aber stabil und nützlich zu sein.

1
Jim Meyer

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 dies Ihre eigentliche Frage. Um andere Tools wie Buildout ( http://www.buildout.org/de/latest/ ) zu verwenden, isolieren Sie Ihr Python-Build-System für die Umgebung für jedes Projekt, das Sie verwalten. Ich benutze dies seit einiger Zeit, aber jetzt nicht. 

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 dieser isolierten Umgebung kann ich Pip oder Easy-Install (falls erforderlich) verwenden.

0
Yonsy Solis