Allgemeine Python-Tools: Verwendung von virtualenv, Installation mit Pip und Paketverwaltung
Einführung
Wenn es darum geht, mit Python zu arbeiten, insbesondere im Bereich der Anwendungsentwicklung, gibt es bestimmte Werkzeuge, die oft an verschiedenen Stellen oder in Open-Source-Code erwähnt werden. Trotz ihrer äußerst häufigen Verwendung ist es leider manchmal schwierig, ein gutes Handbuch zu finden, das dich durch jeden Schritt führt, was absolut entscheidend ist, wenn es darum geht, sich mit solch wichtigen und benötigten Werkzeugen vertraut zu machen.
In diesem DigitalOcean-Artikel möchten wir Ihnen nicht nur die Grundlagen, sondern auch die Logik hinter beliebten Python-Tools und -Elementen näherbringen, während wir sie in realen Anwendungsszenarien verwenden. Wir werden beginnen mit dem Herunterladen und Installieren einiger gängiger Bibliotheken, dem Einrichten und Arbeiten mit virtuellen Umgebungen (mit virtualenv) und dem Verwalten von Paketen für die Entwicklung und Produktion Ihrer eigenen Anwendungen.
Dieser Artikel richtet sich an Anfänger sowie an diejenigen, die tiefergehendes Wissen erwerben möchten. Wenn Sie mehr sehen und lernen möchten, können Sie gerne einen Vorschlag im Kommentarbereich unten machen.
Python auf CentOS
Bitte denken Sie daran, dass Sie bei der Verwendung eines CentOS/RHEL-Systems davon absehen sollten, mit dem standardmäßigen Python-Interpreter zu arbeiten, der mit dem Betriebssystem geliefert wird. Stattdessen sollten Sie es vorziehen, Python selbst zu installieren.
Wenn Sie dies noch nicht getan haben und lernen möchten, wie es geht, sehen Sie sich bitte unser Tutorial an: Wie man Python 2.7.6 und 3.3.3 auf CentOS 6.4 einrichtet, bevor wir beginnen.
Ebenso können Sie, um pip und virtualenv auf CentOS mit einer benutzerdefinierten Python-Installation zu installieren, den Anweisungen in diesem Artikel folgen.
Python und Pakete
Obwohl Python-Anwendungen aus einer einzelnen Datei bestehen können, bestehen sie normalerweise aus einer Reihe von Funktionen, Objekten (Klassen), nützlichen Werkzeugen und natürlich Variablen, die sich über mehrere Datei(en) erstrecken, die in Modulen platziert sind. Diese Module bilden gemeinsam das, was als Paket bezeichnet wird.
Die traditionelle Art, ein Paket zu installieren, besteht darin, es zunächst zu finden und dann herunterzuladen. Es klingt sanft und einfach, weil es tatsächlich so ist, wie viele Dinge in Python - aber es ist nicht perfekt.
Wenn die Dateien bereit und entpackt sind, können Sie es mit dem distutils Modul installieren, indem Sie setup.py aufrufen:
Installationsbeispiel eines Pakets:
# Example: cd [package name]
cd a_package
python setup.py install
distutils (Distributionswerkzeuge) ist ein Toolset, das für das Packaging und die Verteilung von Code verwendet wird. Es wird standardmäßig mit Python ausgeliefert (d.h. es ist in der Standardbibliothek enthalten).
Trotz der Einfachheit des oben erklärten Verfahrens ist es nutzlos, wenn die Herausforderung, die bei der Installation abstrahiert wurde, an anderer Stelle im Prozess existiert: sie zu finden und zu verwalten. Hier kommt das Paketmanagement über Tools ins Spiel - mit mehreren Vorteilen wie:
- Deinstallation (z. B.
pip uninstall package_x), - Versionierung (z. B.
pip install django==x), - Und automatische Abhängigkeitsverwaltung (da Pakete von anderen abhängen können).
Paketverwaltung
Pakete in Python können Werkzeuge, Bibliotheken, Frameworks und Anwendungen sein. Angesichts der Beliebtheit und der Schönheit der Sprache gibt es zehntausende von verfügbaren Paketen, die du für deine eigenen Projekte nutzen kannst.
Paketverwaltungstools
Die beiden häufigsten Python-Paketmanager sind pip und easy_install. Beide zielen darauf ab, den Benutzern bei den Aufgaben zu helfen:
- Herunterladen, Installieren und Deinstallieren
- Bau
- Verwalten von Python-Paketen und vieles mehr
Beide mögen von außen betrachtet dasselbe tun, und ihre gemeinsame Abhängigkeit von der gemeinsamen Bibliothek setuptools verstärkt diesen Eindruck.
In diesem Fall ist es jedoch das, was dem Auge verborgen bleibt, das den Unterschied ausmacht – und das ist auch viel.
pip vs easy_install
Das erste Werkzeug, das für die Aufgabe erstellt wurde, war easy_install. Obwohl es eine Erleichterung und Freude war, im Vergleich dazu alles manuell zu machen, hat sich im Laufe der Zeit herausgestellt, dass es in bestimmten Aspekten problematisch ist. Das schuf die Grundlage für die Entwicklung von pip, einem weiteren Paketmanager.
pip (wie vom Projekt selbst definiert) ist ein Ersatz für easy_install, der viele Vorteile gegenüber seinem Vorgänger bietet, einschließlich, aber nicht beschränkt auf:
- Alles herunterladen, bevor man installiert
- Nützliche Rückmeldungen während des Prozesses geben
- Die Aufzeichnung der durchgeführten Aktionen
- Nützliche Fehlermeldungen im Einklang mit der Python-Tradition bereitstellen
- Ergänzt virtualenv und funktioniert sehr gut damit.
Um mehr über pip zu erfahren, ziehen Sie in Betracht, die Einführung zu lesen, die im PyPI-Paketindex zu finden ist, indem Sie hier klicken.
Eine gründliche pip-Anleitung
In diesem Abschnitt werden wir darüber sprechen, wie man die notwendigen Abhängigkeiten für pip erhält, die neueste Version installiert und anschließend die grundlegenden Funktionen erläutert, die angeboten werden, wie zum Beispiel installieren, deinstallieren, einloggen und Verwaltung von Anforderungen.
Wann würde ich pip verwenden?
Wie versprochen bei der Einführung wollen wir Ihnen Beispiele aus realen Lebensszenarien geben.
Stellen Sie sich vor, Sie entwickeln eine kleine Anwendung. Sie haben sich einen Fahrplan erstellt, und alles läuft gut. Dann entdecken Sie eine Bibliothek (oder ein Modul), die Ihnen eine große Hilfe sein kann, wenn Sie sie in Ihre Anwendung integrieren. Sie können es auf die herkömmliche Weise herunterladen, wie wir erklärt haben. Wenn Sie jedoch nicht nur ein, sondern 3, 4 oder sogar 20 Pakete haben, mit denen Sie umgehen müssen, wird dieser Prozess kompliziert. Wenn Sie auch das Management dieser Pakete (z. B. Aktualisierungen, Deinstallation, Austausch, Verwendung einer anderen Version) einbeziehen, erkennen Sie die Probleme, mit denen Sie umgehen müssen, die durch die Verwendung von pip, dem Paketmanager, überflüssig gemacht werden.
Installation von pip
Um pip zu installieren, müssen wir zuerst seine Abhängigkeiten beachten. Aber keine Sorge, es ist sehr einfach.
setuptools
Wie oben erklärt, ist eine der Abhängigkeiten von pip die setuptools Bibliothek. Sie baut auf der (Standard-)Funktionalität des Distribution Utilities Werkzeugsets von Python auf, das distutils genannt wird. Da distutils standardmäßig bereitgestellt wird, brauchen wir nur noch setuptools.
Wir werden die Installationsdateien für setuptools sicher mit curl herunterladen. cURL ist eine Systembibliothek, die den Datentransfer über verschiedene Protokolle ermöglicht (d.h. eine gemeinsame Sprache für den Datenaustausch zwischen Anwendungen, wie HTTP). Es wird die SSL-Zertifikate von der Quelle überprüfen und die Daten an den Python-Interpreter weitergeben.
Diese Setup-Dateien, die der Python-Interpreter ausführen wird, automatisieren den Installationsprozess, da sie die neueste stabile Version auf unserem System einrichten.
Führen Sie den folgenden Befehl aus:
curl https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py | python -
Diese Installation gibt uns die Möglichkeit, pip systemweit zu verwenden. Dies ist jedoch nicht der bevorzugte Weg, um andere Pakete zu installieren. Empfohlen wird, immer selbständige Python-Umgebungen, virtualenv, zu verwenden. Wir werden im nächsten Abschnitt darüber sprechen.
Hinweis: Sie müssen möglicherweise ausdrücklich Superuser-Privilegien erwerben, um mit dem Download fortzufahren. In diesem Fall sollten Sie in Betracht ziehen, Folgendes zu verwenden:
curl https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py | sudo python -
Nachdem die einzige Abhängigkeit installiert wurde, können wir nun mit dem Herunterladen und Einrichten von pip fortfahren.
Wir werden erneut curl verwenden, um die Setup-Datei sicher herunterzuladen und zu installieren.
Führen Sie den folgenden Befehl aus:
curl https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python -
Der Standardinstallationsordner für pip befindet sich unter:
/usr/local/bin
Um es zu verwenden, ohne den vollständigen Pfad anzugeben, muss es zu PATH hinzugefügt werden.
Aktualisierung PATH:
export PATH="/usr/local/bin:$PATH"
Nachdem wir diesen Schritt abgeschlossen haben, sind wir bereit, mit pip zu arbeiten.
Verwenden von pip
Die Verwendung von pip macht wirklich Spaß und kann als kopffrei betrachtet werden. Wenn Sie in der Vergangenheit mit extrem unnötigen Problemen zu tun hatten und nicht einmal verstanden haben, warum, wird pip dafür sorgen, dass diese für Sie hiermit auf ein Minimum beschränkt werden.
Pakete mit pip installieren
pip kann viele Dinge tun, aber es wäre kein Fehler zu sagen, dass die am häufigsten verwendete Funktion davon Pakete zu installieren ist. Es gibt mehrere Möglichkeiten, wie es diese Aufgabe für Sie erledigen kann.
Pakete finden und installieren:
# Example: pip install [package name]
# Let's install the excellent *requests* library
pip install requests
Eine bestimmte Version finden und installieren:
# Example: pip install [package name]==[version]
# Let's install version 2.0.0. of requests
pip install requests==2.0.0
Installation von einer URL oder einem VCS-Repository:
# Example: pip install [url]
# Let's install virtualenv
pip install https://github.com/pypa/virtualenv/tarball/1.9.X
Installation in einem virtualenv:
# Example: pip install [env name] [package name]
# This will either install inside an environment, or create one
# Let's install requests inside a virtualenv called *venv*
pip install -E venv requests
Pakete mit pip deinstallieren:
Die zweithäufigste Funktion von pip ist wahrscheinlich das Deinstallieren von Paketen.
Ein Paket deinstallieren:
# Example: pip uninstall [package name]
# Let's remove requests library
pip uninstall requests
Pakete mit pip aktualisieren
Wenn Sie daran denken, eine Anwendung zu deinstallieren, um eine neuere Version zu installieren, können Sie versuchen, ein Upgrade durchzuführen.
Ein Paket aktualisieren:
# Example: pip install --upgrade [package name]
# Let's upgrade requests library
pip install --upgrade requests
Pakete mit pip suchen
Bevor Sie entscheiden, ein Paket zu entfernen oder zu aktualisieren, könnten Sie das Bedürfnis haben, zuerst nach einem zu suchen.
Auf der Suche nach einem Paket:
# Example: pip search [package name]
# Let's find all django packages
# This might take a while (there's tonnes of them!)
pip search django
Erstellen einer Liste der installierten Pakete mit pip
Eine der wirklich außergewöhnlichen und lebensrettenden Fähigkeiten von pip ist es, mit Leichtigkeit Listen (“freeze”) von installierten Paketen zu erstellen. Dies wird auch oft Requirements genannt. Je nach Ihrer Python-Umgebung (ob es sich um eine virtuelle oder eine globale handelt), wird pip mit einem einzigen Befehl eine Datei erstellen, die alle installierten Pakete auflistet.
Erstellen einer neuen Liste („Einfrieren“):
Hinweis: Dieser Befehl erstellt eine Datei im aktuellen Arbeitsverzeichnis.
# Example: pip freeze > [file name.ext]
# Let's list all the packages currently installed
pip freeze > package_list.txt
Erstellen einer Liste („Einfrieren“) oben auf einer Vorlage:
Hinweis: Dieser Befehl erstellt eine Datei im aktuellen Arbeitsverzeichnis.
# Example: pip freeze -r [existing file.ext] > [filename.ext]
# Let's append new packages installed after the last freeze
pip freeze package_list.txt > package_list_new.txt
Alle Pakete aus einer Liste mit *pip installieren
Wenn Sie an einer Anwendung arbeiten - vorzugsweise in einer virtuellen Umgebung - werden dort alle benötigten Abhängigkeiten (erforderliche Pakete) installiert sein. Nachdem Sie eine Liste dieser Abhängigkeiten mit freeze erstellt haben, können Sie sie mit install erneut installieren.
Installieren aller Pakete aus einer Liste („freeze“):
# Example: pip install -r [file name.ext]
# Let's install back all the packages from the previous example
pip install -r package_list_new.txt
Ein gründliches virtualenv Handbuch
Lassen Sie uns beginnen, indem wir definieren, was genau virtualenv ist und in welcher Situation es nützlich ist.
virtuelle Umgebung:
In der Welt von Python ist ein Umgebung ein Ordner (Verzeichnis), der alles enthält, was ein Python-Projekt (Anwendung) benötigt, um in einem organisierten, isolierten Modus zu laufen. Wenn sie initiiert wird, kommt sie automatisch mit ihrem eigenen Python-Interpreter - einer Kopie desjenigen, der zu ihrer Erstellung verwendet wurde - sowie ihrem eigenen pip.
Es gibt eine Reihe von Problemen, die virtualenv löst:
- Einen frischen, isolierten Raum für ein Python-Projekt erstellen
- Pakete herunterladen zu können, ohne Administrator-/Sudo-Rechte zu benötigen
- Anwendung einfach verpacken
- Eine Liste von Abhängigkeiten erstellen, die zu einem einzelnen Projekt gehören, das mit pip erstellt wurde.
- Die Abhängigkeiten einfach mit einer Anforderungen-Datei wiederherstellen, die mit pip erstellt wurde.
- Flexibilität über verschiedene Systeme hinweg bieten
Die Verwendung von virtualenv ist die empfohlene Vorgehensweise für die Arbeit an Python-Projekten, unabhängig davon, wie viele Sie gerade bearbeiten. Es ist sehr einfach zu verwenden und ein ausgezeichnetes Tool, das Ihnen zur Verfügung steht. Es bringt wirklich Wunder, wenn es mit pip kombiniert wird.
Wir werden mit der Installation von virtualenv auf dem System beginnen.
Virtualenv installieren
Um virtualenv zu installieren, werden wir pip zur Hilfe rufen. Wir werden es als global verfügbares Paket installieren, damit der Python-Interpreter es ausführen kann.
Es gibt zwei Möglichkeiten, die Anwendung zu erhalten. Die Version, die Sie erhalten können, hängt davon ab, welche Sie wählen.
Die einfachste Methode ist die Verwendung von pip, um zu suchen, herunterzuladen und zu installieren. Dies könnte nicht die neueste stabile Version für Sie bereitstellen.
Herunterladen von virtualenv mit pip:
# Example: [sudo] pip install virtualenv
sudo pip install virtualenv
Die neueste verfügbare Version mit curl herunterladen:
Die neueste Version von virtualenv ist 1.11.X.
# Example: [sudo] pip install [github repo]/[version]
sudo pip install https://github.com/pypa/virtualenv/tarball/1.1.X
Verwendung von virtualenv
Die Verwendung dieses Werkzeugs besteht darin, es dazu zu bringen, einen Ordner zu erstellen, der den Python-Interpreter und eine Kopie von pip enthält. Danach müssen wir, um damit zu arbeiten, entweder den Standort dieses Interpreters angeben oder ihn aktivieren.
Alle Anwendungen, die Sie mit dem Interpreter innerhalb der virtuellen Umgebung installieren, werden an diesem Ort abgelegt.
Wenn Sie pip verwenden, um eine Liste davon zu erstellen, werden nur die, die sich im Ordner befinden, in eine Datei kompiliert.
Denke daran: Wenn du mit einer Umgebung fertig bist, bevor du zu einer anderen wechselst - oder mit der global installierten arbeitest - musst du sicherstellen, dass du
deactivateausführst.
Erstellen/Initiieren einer virtuellen Umgebung (virtualenv)
Eine Umgebung mit demselben Interpreter erstellen, der verwendet wird, um sie auszuführen:
# Example: virtualenv [folder (env.) name]
# Let's create an environment called *my_app*
virtualenv my_app
Erstellen einer Umgebung mit einem benutzerdefinierten Python-Interpreter:
# Example: virtualenv --python=[loc/to/python/] [env. name]
virtualenv --python=/opt/python-3.3/bin/python my_app
Aktivierung einer virtuellen Umgebung
# Example: source [env. name]/bin/activate
# Let's activate the Python environment we just created
source my_app/bin/activate
Arbeiten mit einer virtuellen Umgebung, ohne sie zu aktivieren
aus verschiedenen Gründen können Sie sich entscheiden, die Umgebung vor der Verwendung nicht zu aktivieren. Dies bringt mehr Flexibilität für die Befehle, die Sie ausführen, jedoch müssen Sie sicherstellen, dass Sie jedes Mal den richtigen Interpreter anvisieren.
# Example: [env. name]/bin/python [arguments]
my_app/bin/python python_script.py
Verwendung der pip-Installation innerhalb der Umgebung ohne Aktivierung
# Example: [env. name]/bin/pip [command] [arguements]
# Let's install requests library without activating the env.
my_app/bin/pip install requests
Deaktivierung einer virtuellen Umgebung:
# Example: deactivate
# Let's deactivate the environment from earlier
deactivate
