Pipenv

Seit ich fuer die Arbeit viel Python programmiere laufen mir immer wieder interessante Tools ueber den Weg. Normalerweise versuche ich die Projekte so kompakt wie moeglich zu halten, aber ein bisschen Hilfe beim Arbeiten kann nicht schaden.

Pipenv verspricht virtualenv und pip zu vereinen. Wer schon oefters mit ihnen gearbeitet hat wird verstehen warum das verlockend ist.

Besonders interessant finde ich die Trennung von development und normalen Tools. Wenn man sieht wieviele Abhaengigkeiten alleine Sphinx hat klingt das sehr verlockend es nur in die development Umgebung zu installieren.

Man installiert eine neue Umbegung mit:

pipenv install

Die Python Version gibt man mit --two oder --three and. Neue Pakete werde aehnlich wie bei pip installiert:

pipenv install <package name>

Um etwas in der development Umgebung zu installieren muss es mit -d aufgerufen werden.

pipenv install -d sphinx

Im Projekt werden zwei Dateien angelegt:

  • Pipfile
  • Pipfile.lock

Das erste beschreibt die Umgebung, mit Pythonversion, allen Paketen und restlicher Konfiguration. In der .lock-Datei werden die gleichen Einstellungen eingefroren. Das ist meineswissens praktisch, das Pip automatisch immer die neuste Version eines Pakets installiert. Man kann eine Version fest definieren, aber das kann schnell unuebersichtlich werden wenn die Pakete weiter Abhaengigkeiten in das Projekt bringen.

Wenn jemand dann das Projekt clont und alle Abhaengigkeiten installieren will muss er nur folgenden Befehl ausfuehren:

pipenv sync

Mit -d werden auch die Pakete fuer das Development installiert.

Das Aktivieren der Umgebung wurde auch grundsaetzlich geandert. Man startet es jetzt mit:

pipenv shell

Oder fuehrt einen Befehl in der Umbegung aus mit:

pipenv run <command>

Das wuerde heissen man kann in einem Bash Skript oder Makefile direkt in einer Umgebung einen Test oder aehnliches ausfuehren. Ich glaube das koennte das Leben ein bisschen leichter machen.