Was ist Pip? Ein Leitfaden für neue Pythonisten

Was ist Pip? Ein Leitfaden für neue Pythonisten

Was istpip? pip ist der Standardpaketmanager fürPython. Sie können damit zusätzliche Pakete installieren und verwalten, die nicht Teil derPython standard library sind. Dieses Tutorial ist eine Einführung inpip für neue Pythonisten.

In diesem Tutorial erfahren Sie mehr über:

  • Installieren zusätzlicher Pakete, die nicht in der Standard-Python-Distribution enthalten sind

  • Suchen von Paketen, die inPython Package Index (PyPI) veröffentlicht wurden

  • Verwalten der Anforderungen für Ihre Skripte und Anwendungen

  • Pakete deinstallieren und ihre Abhängigkeiten

Wie Sie sehen werden, ist die Python-Community sehr aktiv und hat einige nette Alternativen zupip erstellt, die Sie später in diesem Tutorial kennenlernen werden.

Free Bonus:5 Thoughts On Python Mastery, ein kostenloser Kurs für Python-Entwickler, der Ihnen die Roadmap und die Denkweise zeigt, die Sie benötigen, um Ihre Python-Fähigkeiten auf die nächste Stufe zu bringen.

Erste Schritte mitpip

Also, was ist Pip? pip ist ein Paketmanager für Python. Dies bedeutet, dass Sie mit diesem Tool zusätzliche Bibliotheken und Abhängigkeiten installieren und verwalten können, die nicht als Teil der Standardbibliothek verteilt sind.

Die Paketverwaltung ist so wichtig, dasspip seit den Versionen3.4 für Python 3 und2.7.9 für Python 2 im Python-Installationsprogramm enthalten ist und von vielen Python-Projekten verwendet wird unverzichtbares Werkzeug für jeden Pythonista.

Das Konzept eines Paketmanagers ist Ihnen möglicherweise vertraut, wenn Sie aus anderen Sprachen kommen. JavaScript verwendetnpm für die Paketverwaltung,Ruby verwendetgem und.NET verwendetNuGet. In Python istpip zum Standardpaketmanager geworden.

Das Python-Installationsprogramm installiertpip, sodass es für Sie bereit sein sollte, es sei denn, Sie haben eine alte Version von Python installiert. Sie können überprüfen, obpip verfügbar ist, indem Sie den folgenden Befehl in Ihrer Konsole ausführen:

$ pip --version

pip 18.1 from C:\Python37\lib\site-packages\pip (python 3.7)

Sie sollten eine ähnliche Ausgabe sehen, in der die Version vonpipowie der Speicherort und die Version von Python angezeigt werden. Wenn Sie eine alte Version von Python verwenden, diepip nicht enthält, können Sie sie installieren, indem Sie den Anweisungen für Ihr System inpip installation documentation folgen.

Sie möchten wahrscheinlich den Beispielen in diesem Lernprogramm in einer virtuellen Umgebung folgen, um die Installation von Paketen für die globale Python-Installation zu vermeiden. Sie können sich inPython Virtual Environments: A Primer über virtuelle Umgebungen informieren. Im AbschnittUsing Virtual Environmentsdieses Artikels werden die Grundlagen zum Erstellen neuer virtueller Umgebungen erläutert.

Installieren von Paketen mitpip

Python wird alsbatteries included-Sprache betrachtet. Das bedeutet, dassPython standard library einen umfangreichen Satz von Paketen und Modulen enthält, um Entwicklern bei ihren Skripten und Anwendungen zu helfen.

Gleichzeitig verfügt Python über eine sehr aktive Community, die eine noch größere Anzahl von Paketen bereitstellt, die Sie bei Ihren Entwicklungsanforderungen unterstützen können. Diese Pakete werden inPython Package Index veröffentlicht, auch bekannt alsPyPI (ausgesprochenPie Pea Eye). PyPI enthält eine umfangreiche Sammlung von Paketen, die Entwicklungsframeworks, Tools und Bibliotheken enthalten.

Viele dieser Pakete vereinfachen die Python-Entwicklung, indem sie benutzerfreundliche Schnittstellen zu Funktionen bereitstellen, die bereits in der Standardbibliothek vorhanden sind. Sie können beispielsweise ein Skript schreiben, das den Inhalt einer Webseite nur mit den in Python enthaltenen Standardbibliotheken abruft:

# In using-http.py

import cgi
import http.client

server = 'www.google.com'
url = '/'
conn = http.client.HTTPSConnection(server)
conn.request('GET', url)
response = conn.getresponse()
content_type = response.headers.get('Content-Type')
_, params = cgi.parse_header(content_type)
encoding = params.get('charset')
data = response.read()
text = data.decode(encoding)

print(f'Response returned: {response.status} ({response.reason})')
print('Body:')
print(text)

In diesem Skript importieren Siecgi undhttp.client, die beide in der Python-Standardbibliothek enthalten sind. Sie erstellen einHTTPSConnection-Objekt, das den Server angibt, und rufen dessen.request() und.getresponse() auf, um eine Antwort abzurufen.

Aus der Antwort können Sie den Header vonContent-Typeabrufen und mit dem Modulcgi analysieren, um den Zeichensatz zu extrahieren, in dem die Seite codiert ist.

cgi.parse_header() gibt ein Tupel mit einem Hauptwert und einem Wörterbuch von Parametern zurück. Beispielsweise kann der HeaderContent-Type einen Wert wietext/html; charset=ISO-8859-1 enthalten.

Das Tupel enthält die Zeichenfolgetext/html als erstes Element, und das zweite Element ist ein Wörterbuch in der Form{'charset': 'ISO-8859-1'}. Da Sie sich nur um den Parametercharset kümmern, können Sie den Beginn des Tupels mit einem Unterstrich ignorieren:_, params = cgi.parse_header(content_type).

Note:The Meaning of Underscores in Python erklärt, wie Unterstriche zum Entpacken von Werten aus einem Tupel verwendet werden.

Sobald Sie die Kodierung der Seite haben, können Sie die Antwort lesen und in Text dekodieren. Sie können das Beispiel in der Konsole ausführen, um zu sehen, wie es funktioniert:

$ python using-http.py

Response returned: 200 (OK)
Body:
... Additional Output Omitted

Dies scheint eine Menge Arbeit für ein kleines Skript zu sein, das den Inhalt einer Webseite abruft. Glücklicherweise gibt es ein Python-Paket, das HTTP-Anforderungen vereinfacht und eine schöne Oberfläche bietet, um genau das zu tun, was Sie wollen.

Grundlegende Paketinstallation

PyPI hostet eine sehr beliebte Bibliothek zum Ausführen von HTTP-Anforderungen namensrequests. Sie können alles darüber in seinen offiziellendocumentation site erfahren.

Der erste Schritt besteht darin, das Paketrequestsin Ihrer Umgebung zu installieren. Sie können mehr überpip unterstützte Befehle erfahren, indem Sie sie mithelp ausführen:

$ pip help

Usage:
  pip  [options]

Commands:
  install                     Install packages.
  download                    Download packages.
  uninstall                   Uninstall packages.
  freeze                      Output installed packages in requirements format.
  list                        List installed packages.
  show                        Show information about installed packages.
  check                       Verify installed packages have compatible
                              dependencies.
  config                      Manage local and global configuration.
  search                      Search PyPI for packages.
  wheel                       Build wheels from your requirements.
  hash                        Compute hashes of package archives.
  completion                  A helper command used for command completion.
  help                        Show help for commands.

General Options:
  -h, --help                  Show help.
  --isolated                  Run pip in an isolated mode, ignoring environment
                              variables and user configuration.
  -v, --verbose               Give more output. Option is additive, and can be
                              used up to 3 times.
  -V, --version               Show version and exit.
  -q, --quiet                 Give less output. Option is additive, and can be
                              used up to 3 times (corresponding to WARNING,
                              ERROR, and CRITICAL logging levels).
  --log                 Path to a verbose appending log.
  --proxy              Specify a proxy in the form
                              [user:passwd@]proxy.server:port.
  --retries          Maximum number of retries each connection should
                              attempt (default 5 times).
  --timeout              Set the socket timeout (default 15 seconds).
  --exists-action     Default action when a path already exists:
                              (s)witch, (i)gnore, (w)ipe, (b)ackup, (a)bort).
  --trusted-host    Mark this host as trusted, even though it does
                              not have valid or any HTTPS.
  --cert                Path to alternate CA bundle.
  --client-cert         Path to SSL client certificate, a single file
                              containing the private key and the certificate in
                              PEM format.
  --cache-dir            Store the cache data in .
  --no-cache-dir              Disable the cache.
  --disable-pip-version-check
                              Don't periodically check PyPI to determine
                              whether a new version of pip is available for
                              download. Implied with --no-index.

Wie Sie sehen können, bietetpip einen Befehlinstall zum Installieren von Paketen. Sie können es ausführen, um das Paketrequestszu installieren:

$ pip install requests

Looking in indexes: https://pypi.org/simple
Collecting requests
  Using cached
  https://files.pythonhosted.org/packages/7d/e3/
  20f3d364d6c8e5d2353c72a67778eb189176f08e873c9900e10c0287b84b/
  requests-2.21.0-py2.py3-none-any.whl
Collecting chardet<3.1.0,>=3.0.2 (from requests)
  Using cached https://files.pythonhosted.org/packages/bc/a9/
  01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/
  chardet-3.0.4-py2.py3-none-any.whl
Collecting idna<2.9,>=2.5 (from requests)
  Using cached https://files.pythonhosted.org/packages/14/2c/
  cd551d81dbe15200be1cf41cd03869a46fe7226e7450af7a6545bfc474c9/
  idna-2.8-py2.py3-none-any.whl
Collecting urllib3<1.25,>=1.21.1 (from requests)
  Using cached https://files.pythonhosted.org/packages/62/00/
  ee1d7de624db8ba7090d1226aebefab96a2c71cd5cfa7629d6ad3f61b79e/
  urllib3-1.24.1-py2.py3-none-any.whl
Collecting certifi>=2017.4.17 (from requests)
  Using cached https://files.pythonhosted.org/packages/9f/e0/
  accfc1b56b57e9750eba272e24c4dddeac86852c2bebd1236674d7887e8a/
  certifi-2018.11.29-py2.py3-none-any.whl
Installing collected packages: chardet, idna, urllib3, certifi, requests
Successfully installed certifi-2018.11.29 chardet-3.0.4 idna-2.8
  requests-2.21.0 urllib3-1.24.1
You are using pip version 18.1, however version 19.0.1 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip'
  command.

Sie sollten eine Ausgabe ähnlich der obigen sehen. Sie verwendenpip mit einem Befehlinstall, gefolgt vom Namen des Pakets, das Sie installieren möchten. pip sucht in PyPI nach dem Paket, berechnet seine Abhängigkeiten und installiert sie, um sicherzustellen, dassrequests funktioniert.

Sie können auch sehen, dass die aktuelle Umgebungpip Version18.1 verwendet, aber Version19.0.1 verfügbar ist. Außerdem wird der Befehl angezeigt, mit dem Siepip aktualisieren sollten. Gehen Sie also folgendermaßen vor:

$ python -m pip install --upgrade pip

Looking in indexes: https://pypi.org/simple
Collecting pip
  Downloading https://files.pythonhosted.org/packages/46/dc/
  7fd5df840efb3e56c8b4f768793a237ec4ee59891959d6a215d63f727023/
  pip-19.0.1-py2.py3-none-any.whl (1.4MB)
    100% |████████████████████████████████| 1.4MB 2.0MB/s
Installing collected packages: pip
  Found existing installation: pip 18.1
    Uninstalling pip-18.1:
      Successfully uninstalled pip-18.1
Successfully installed pip-19.0.1

Beachten Sie, dass Siepython -m verwenden, umpip zu aktualisieren. Der Schalter-m weist Python an, ein Modul als ausführbare Datei auszuführen. Dies ist erforderlich, damit zum Aktualisieren vonpip die alte Version vor der Installation der neuen Version deinstalliert werden muss. Das Entfernen während der Ausführung des Tools kann zu Fehlern führen.

Wenn Siepip als Modul ausführen, lädt Python das Modul in den Speicher und ermöglicht das Entfernen des Pakets, während es verwendet wird. Sie können Pakete so ausführen, als wären sie Skripte, wenn das Pakethttps://docs.python.org/3/library/main.html [Skript der obersten Ebene]__main__.py enthält.

Nachdem Sierequests installiert undpip aktualisiert haben, können Sie mit dem Befehllist die in Ihrer Umgebung installierten Pakete anzeigen:

$ pip list

Package    Version
---------- ----------
certifi    2018.11.29
chardet    3.0.4
idna       2.8
pip        19.0.1
requests   2.21.0
setuptools 40.6.2
urllib3    1.24.1

Wie Sie sehen können, wurdepip auf Version19.0.1 (die aktuellste Version) aktualisiert undrequests Version2.21.0 wurde installiert.

Der Befehlpip install <package> sucht immer nach der neuesten Version des Pakets und installiert es. Außerdem wird nach Abhängigkeiten gesucht, die in den Paketmetadaten aufgeführt sind, und diese Abhängigkeiten werden installiert, um sicherzustellen, dass das Paket alle erforderlichen Anforderungen erfüllt.

Wie Sie sehen, wurden mehrere Pakete installiert. Sie können die Paketmetadaten mit dem Befehlshow inpip anzeigen:

$ pip show requests

Name: requests
Version: 2.21.0
Summary: Python HTTP for Humans.
Home-page: http://python-requests.org
Author: Kenneth Reitz
Author-email: [email protected]
License: Apache 2.0
Location: py37\lib\site-packages
Requires: certifi, chardet, idna, urllib3
Required-by:

In den Metadaten werdencertifi,chardet,idna undurllib3 als Abhängigkeiten aufgeführt, und Sie können sehen, dass sie ebenfalls installiert wurden.

Wenn das Paketrequests installiert ist, können Sie das obige Beispiel ändern und sehen, wie einfach es ist, den Inhalt einer Webseite abzurufen:

# In using-requests.py

import requests

url = 'https://www.google.com'
response = requests.get(url)
print(f'Response returned: {response.status_code}, {response.reason}')
print(response.text)

Sie können dasrequests-Paket wie jedes andere Standardpaket importieren, da es jetzt in Ihrer Umgebung installiert ist.

Wie Sie sehen können, übernimmtrequests.get() die HTTP-Verbindung für Sie und gibt ein Antwortobjekt zurück, das dem ursprünglichen Beispiel ähnelt, jedoch einige Verbesserungen an der Benutzeroberfläche aufweist.

Sie müssen sich nicht mit der Codierung der Seite befassen, darequests dies in den meisten Situationen für Sie erledigt. Dennoch bietetrequests eine flexible Schnittstelle, um Sonderfälle über dasrequests.Response-Objekt zu behandeln.

Anforderungsdateien verwenden

Der Befehlpip install installiert immer die neueste veröffentlichte Version eines Pakets. Manchmal möchten Sie jedoch möglicherweise eine bestimmte Version installieren, von der Sie wissen, dass sie mit Ihrem Code funktioniert.

Sie möchten eine Spezifikation der Abhängigkeiten und Versionen erstellen, die Sie zum Entwickeln und Testen Ihrer Anwendung verwendet haben, damit es keine Überraschungen gibt, wenn Sie die Anwendung in der Produktion verwenden.

In Anforderungsdateien können Sie genau angeben, welche Pakete und Versionen installiert werden sollen. Das Ausführen vonpip help zeigt an, dass es einen Befehlfreeze gibt, der die installierten Pakete im Anforderungsformat ausgibt. Mit diesem Befehl können Sie die Ausgabe in eine Datei umleiten, um eine Anforderungsdatei zu generieren:

$ pip freeze > requirements.txt
$ cat requirements.txt

certifi==2018.11.29
chardet==3.0.4
idna==2.8
requests==2.21.0
urllib3==1.24.1

Der Befehlfreeze speichert alle Pakete und ihre Versionen in der Standardausgabe, sodass Sie die Ausgabe in eine Datei umleiten können, mit der die genauen Anforderungen auf einem anderen System installiert werden können. Die Konvention lautet, diese Dateirequirements.txt zu benennen, aber Sie können ihr einen beliebigen Namen geben.

Wenn Sie die Umgebung in einem anderen System replizieren möchten, können Siepip install ausführen und die Anforderungsdatei mit dem Schalter-r angeben:

$ pip install -r requirements.txt

Looking in indexes: https://pypi.org/simple
Collecting certifi==2018.11.29 (from -r .\requirements.txt (line 1))
  Using cached https://files.pythonhosted.org/packages/9f/e0/
  accfc1b56b57e9750eba272e24c4dddeac86852c2bebd1236674d7887e8a/
  certifi-2018.11.29-py2.py3-none-any.whl
Collecting chardet==3.0.4 (from -r .\requirements.txt (line 2))
  Using cached https://files.pythonhosted.org/packages/bc/a9/
  01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/
  chardet-3.0.4-py2.py3-none-any.whl
Collecting idna==2.8 (from -r .\requirements.txt (line 3))
  Using cached https://files.pythonhosted.org/packages/14/2c/
  cd551d81dbe15200be1cf41cd03869a46fe7226e7450af7a6545bfc474c9/
  idna-2.8-py2.py3-none-any.whl
Collecting requests==2.21.0 (from -r .\requirements.txt (line 4))
  Using cached https://files.pythonhosted.org/packages/7d/e3/
  20f3d364d6c8e5d2353c72a67778eb189176f08e873c9900e10c0287b84b/
  requests-2.21.0-py2.py3-none-any.whl
Collecting urllib3==1.24.1 (from -r .\requirements.txt (line 5))
  Using cached https://files.pythonhosted.org/packages/62/00/
  ee1d7de624db8ba7090d1226aebefab96a2c71cd5cfa7629d6ad3f61b79e/
  urllib3-1.24.1-py2.py3-none-any.whl
Installing collected packages: certifi, chardet, idna, urllib3, requests
Successfully installed certifi-2018.11.29 chardet-3.0.4 idna-2.8
  requests-2.21.0 urllib3-1.24.1

Die Versionen der Pakete stimmen mit den inrequirements.txt aufgeführten überein:

$ pip list

Package    Version
---------- ----------
certifi    2018.11.29
chardet    3.0.4
idna       2.8
pip        19.0.1
requests   2.21.0
setuptools 40.6.2
urllib3    1.24.1

Sie können die Dateirequirements.txtan die Quellcodeverwaltung senden und damit die genaue Umgebung auf anderen Computern erstellen.

Feinabstimmungsanforderungen

Das Problem mithardcoding der Versionen Ihrer Pakete und ihrer Abhängigkeiten besteht darin, dass Pakete häufig mit Fehler- und Sicherheitskorrekturen aktualisiert werden, und Sie möchten diese wahrscheinlich nutzen, sobald sie veröffentlicht werden.

Mit dem Anforderungsdateiformat können Sie Abhängigkeitsversionen mithilfe logischer Operatoren angeben, die Ihnen ein wenig Flexibilität bieten, um sicherzustellen, dass Pakete aktualisiert werden, aber dennoch die Basisversionen eines Pakets definieren.

Öffnen Sie dierequirements.txt-Datei in Ihren bevorzugteneditor und nehmen Sie die folgenden Änderungen vor:

certifi>=2018.11.29
chardet>=3.0.4
idna>=2.8
requests>=2.21.0
urllib3>=1.24.1

Sie können den logischen Operator in>= ändern, umpip anzuweisen, eine exakte oder größere Version zu installieren, die veröffentlicht wurde. Wenn Sie mithilfe der Dateirequirments.txt eine neue Umgebung festlegen, suchtpip nach der neuesten Version, die die Anforderungen erfüllt, und installiert sie. Sie können die Pakete in Ihrer Anforderungsdatei aktualisieren, indem Sie den Befehlinstall mit dem Schalter--upgrade ausführen:

$ pip install --upgrade -r requirements.txt

Looking in indexes: https://pypi.org/simple
Requirement already up-to-date: certifi==2018.11.29 in \py37\lib\site-packages
  (from -r .\requirements.txt (line 1)) (2018.11.29)
Requirement already up-to-date: chardet==3.0.4 in \py37\lib\site-packages
  (from -r .\requirements.txt (line 2)) (3.0.4)
Requirement already up-to-date: idna==2.8 in \py37\lib\site-packages
  (from -r .\requirements.txt (line 3)) (2.8)
Requirement already up-to-date: requests==2.21.0 in \py37\lib\site-packages
  (from -r .\requirements.txt (line 4)) (2.21.0)
Requirement already up-to-date: urllib3==1.24.1 in \py37\lib\site-packages
  (from -r .\requirements.txt (line 5)) (1.24.1)

Es wurde nichts aktualisiert, da Sie über die neuesten Versionen verfügen. Wenn jedoch eine neue Version für ein aufgeführtes Paket veröffentlicht wurde, wurde das Paket aktualisiert.

In einer idealen Welt wären neue Versionen von Paketen abwärtskompatibel und würden niemals neue Fehler einführen. Leider können neue Versionen Änderungen einführen, die Ihre Anwendung beschädigen. Die Syntax der Anforderungsdatei unterstützt zusätzlicheversion specifiers, um Ihre Anforderungen zu optimieren.

Angenommen, eine neue Version3.0 vonrequests wird veröffentlicht, führt jedoch eine inkompatible Änderung ein, die Ihre Anwendung beschädigt. Sie können die Anforderungsdatei ändern, um zu verhindern, dass3.0 oder höher installiert werden:

certifi>=2018.11.29
chardet>=3.0.4
idna>=2.8
requests>=2.21.0, <3.0
urllib3>=1.24.1

Durch Ändern des Versionsbezeichners für das Paketrequests wird sichergestellt, dass keine Version größer oder gleich3.0 installiert wird. Die Dokumentation (pip) liefert alle Informationen über dierequirements file format, und Sie können sie konsultieren, um mehr darüber zu erfahren.

Produktions- und Entwicklungsabhängigkeiten

Nicht alle Pakete, die Sie während der Entwicklung Ihrer Anwendungen installieren, sind Anwendungsabhängigkeiten. In PyPI wurden viele Pakete veröffentlicht, bei denen es sich um Entwicklungstools oder Bibliotheken handelt, die Sie während des Entwicklungsprozesses nutzen möchten.

Als Beispiel möchten Sie Ihre Anwendung wahrscheinlich einem Unit-Test unterziehen, daher benötigen Sie ein Unit-Test-Framework. Ein beliebtes Framework für Unit-Tests istpytest. Sie möchten es in Ihrer Entwicklungsumgebung installieren, möchten es jedoch nicht in Ihrer Produktionsumgebung, da es keine Anwendungsabhängigkeit ist.

Sie erstellen eine zweite Anforderungsdatei (requirements_dev.txt), um zusätzliche Tools zum Einrichten einer Entwicklungsumgebung aufzulisten:

# In requirements_dev.txt
pytest>=4.2.0

Dazu müssen Siepip verwenden, um beide Anforderungsdateien zu installieren:requirements.txt undrequirements_dev.txt. Glücklicherweise können Sie mit pip zusätzliche Parameter in einer Anforderungsdatei angeben. Sie könnenrequirements_dev.txt ändern, um auch die Anforderungen aus der Produktionsdateirequirements.txtzu installieren:

# In requirements_dev.txt
-r requirements.txt
pytest>=4.2.0

Beachten Sie, dass Sie genau denselben-r-Schalter verwenden, um die Produktionsdateirequirements.txtzu installieren. Mitrequirements file format können Sie zusätzliche Argumente direkt in einer Anforderungsdatei angeben.

Gefrieranforderungen für die Produktion

Sie haben die Produktions- und Entwicklungsanforderungsdateien erstellt und sie der Quellcodeverwaltung hinzugefügt. Die Dateien verwenden flexible Versionsspezifizierer, um sicherzustellen, dass Sie die von Ihren Abhängigkeiten veröffentlichten Fehlerkorrekturen nutzen. Sie testen Ihre Anwendung auch und können sie für die Produktion bereitstellen.

Sie möchten wahrscheinlich sicherstellen, dass die Versionen der Abhängigkeiten, die Sie für die Produktion bereitstellen, genau die Versionen sind, die Sie in Ihrer Integrationspipeline oder Ihrem Erstellungsprozess verwendet haben, da Sie wissen, dass alle Tests bestanden wurden und die Anwendung funktioniert.

Die aktuellen Versionsspezifizierer garantieren nicht, dass dieselben Versionen für die Produktion bereitgestellt werden. Sie möchten daher die Produktionsanforderungen einfrieren, wie Sie zuvor gesehen haben.

Sie erstellen eine saubere virtuelle Produktionsumgebung und installieren die Produktionsanforderungen mithilfe der Dateirequirements.txt. Sobald die Anforderungen installiert sind, können Sie die spezifischen Versionen einfrieren und die Ausgabe in einerequirements_lock.txt-Datei speichern, die Sie in der Produktion verwenden. Dierequirements_lock.txt-Datei enthält genaue Versionsspezifikatoren und kann verwendet werden, um die Umgebung zu replizieren.

Suche nach zu verwendenden Paketen

Wenn Sie ein erfahrener Pythonista werden, gibt es eine Reihe von Paketen, die Sie auswendig kennen und die Sie in den meisten Ihrer Anwendungen verwenden werden. Die Paketerequests undpytest sind gute Kandidaten, um nützliche Werkzeuge in Ihrer Python-Toolbox zu werden.

Es wird jedoch Zeiten geben, in denen Sie ein anderes Problem lösen müssen und nach einem anderen Tool oder einer anderen Bibliothek suchen möchten, die Ihnen dabei helfen können. Wie Sie oben sehen können, zeigtpip help, dass es einen Befehlsearch gibt, der nach in PyPI veröffentlichten Paketen sucht.

Mal sehen, wie dieser Befehl uns helfen kann:

$ pip help search

Usage:
  pip search [options] 

Description:
  Search for PyPI packages whose name or summary contains .

Search Options:
  -i, --index            Base URL of Python Package Index
                              (default https://pypi.org/pypi)

General Options:
  -h, --help                  Show help.
  --isolated                  Run pip in an isolated mode, ignoring environment
                              variables and user configuration.
  -v, --verbose               Give more output. Option is additive, and can be
                              used up to 3 times.
  -V, --version               Show version and exit.
  -q, --quiet                 Give less output. Option is additive, and can be
                              used up to 3 times (corresponding to WARNING,
                              ERROR, and CRITICAL logging levels).
  --log                 Path to a verbose appending log.
  --proxy              Specify a proxy in the form
                              [user:passwd@]proxy.server:port.
  --retries          Maximum number of retries each connection should
                              attempt (default 5 times).
  --timeout              Set the socket timeout (default 15 seconds).
  --exists-action     Default action when a path already exists:
                              (s)witch, (i)gnore, (w)ipe, (b)ackup, (a)bort).
  --trusted-host    Mark this host as trusted, even though it does
                              not have valid or any HTTPS.
  --cert                Path to alternate CA bundle.
  --client-cert         Path to SSL client certificate, a single file
                              containing the private key and the certificate in
                              PEM format.
  --cache-dir            Store the cache data in .
  --no-cache-dir              Disable the cache.
  --disable-pip-version-check
                              Don't periodically check PyPI to determine
                              whether a new version of pip is available for
                              download. Implied with --no-index.
  --no-color                  Suppress colored output

Der Befehl verwendet eine Reihe der oben aufgeführten Optionen und<query>. Die Abfrage ist nur eine Zeichenfolge, nach der gesucht werden muss, und entspricht den Paketen und ihren Beschreibungen.

Note: Mitpip help <command> können Sie zusätzliche Informationen zu einem unterstützten Befehl abrufen.

Angenommen, Ihre Anwendung muss auf einen Dienst zugreifen, derOAuth2 für die Autorisierung verwendet. Idealerweise gibt es eine Bibliothek, die mitrequests oder einer ähnlichen Schnittstelle arbeitet, die uns helfen kann. Suchen wir PyPI mitpip danach:

$ pip search requests oauth

requests-oauth (0.4.1)             - Hook for adding Open Authentication
                                     support to Python-requests HTTP library.
oauth (1.0.1)                      - Library for OAuth version 1.0a.
pmr2.oauth (0.6.1)                 - OAuth PAS Plugin, OAuth 1.0 provider for
                                     Plone.
oauth-proxy (1.0.5)                - OAuth HTTP proxy
django-oauth (1.1)                 - Support of OAuth in Django.
intuit-oauth (1.2.0)               - Intuit OAuth Client
brubeck-oauth (0.1.11)             - Brubeck OAuth module
guillotina-oauth (2.0.0)           - guillotina oauth support
httpie-oauth (1.0.2)               - OAuth plugin for HTTPie.
paytm-oauth (0.2)                  - Consumer for paytm oauth
plurk-oauth (0.9.2)                - Plurk OAuth API
oauth-flow (1.0.3)                 - Authenticate and make calls to OAuth 1.0,
                                     OAuth 2.0 services
... Additional Output Omitted

Der Suchbegriff ergibt eine ziemlich umfangreiche Sammlung von Paketen. Einige von ihnen scheinen spezifisch für einen Dienst oder eine Technologie wiedjango-oauth zu sein. Andere sehen vielversprechend aus, wierequests-oauth. Leider gibt es nur eine kurze Beschreibung.

Meistens möchten Sie direkt auf derPyPI-Website nach Paketen suchen. PyPI bietet Suchfunktionen für seinen Index und eine Möglichkeit, Ergebnisse nach den im Paket enthaltenen Metadaten wie Framework, Thema, Entwicklungsstatus usw. zu filtern.

Eine Suche nach denselben Begriffen in PyPI liefert viele Ergebnisse, aber Sie können sie nach verschiedenen Kategorien filtern. Sie können beispielsweiseIntended Audience erweitern undDevelopers auswählen, da Sie eine Bibliothek benötigen, die Sie bei der Entwicklung Ihrer Anwendung unterstützt. Außerdem möchten Sie wahrscheinlich ein Paket, das stabil und produktionsbereit ist. Sie können die KategorieDevelopment Status erweitern undProduction/Stable auswählen:

PyPi Search Results for Requests OAuth

Sie können zusätzliche Filter anwenden und die Suchbegriffe optimieren, bis Sie das gesuchte Paket gefunden haben.

Die Ergebnisse bieten einen Link zur Paketseite, die weitere Informationen und hoffentlich einige Dokumentationen enthält. Werfen wir einen Blick auf die Informationen fürrequests-oauth2:

PyPi Package Page for Requests OAuth 2

Die Projektseite enthält weitere Informationen und scheint einen Link zur Projekthomepage zu haben. Der Link führt Sie zuproject repository auf GitHub. Dort finden Sie weitere Informationen zum Projekt und einige Anwendungsbeispiele.

Das Finden des ursprünglichen Quellcode-Repositorys kann eine unschätzbare Ressource sein. Dort finden Sie einige Hinweise zum Status des Projekts, indem Sie das Datum der letzten Commits, die Anzahl der Pull-Anfragen und offenen Probleme usw. anzeigen.

Eine andere Möglichkeit, ein Paket zu finden, ist Google. Weit verbreitete Python-Bibliotheken werden oben in der Google-Suche angezeigt, und Sie sollten in der Lage sein, einen Link zum Paket in PyPI oder dessen Quellcode-Repository zu finden.

Das Finden des richtigen Pakets kann einige Zeit und Recherche in Anspruch nehmen, beschleunigt jedoch auch Ihren Entwicklungsprozess, sobald Sie es gefunden haben.

Pakete deinstallieren

Hin und wieder müssen Sie ein Paket deinstallieren. Sie haben entweder eine bessere Bibliothek gefunden, um sie zu ersetzen, oder Sie brauchen sie nicht wirklich. Das Deinstallieren von Paketen kann etwas schwierig sein.

Beachten Sie, dasspip bei der Installation vonrequests auch andere Abhängigkeiten installiert hat. Je mehr Pakete Sie installieren, desto größer ist die Wahrscheinlichkeit, dass mehrere Pakete von derselben Abhängigkeit abhängen. Hier bietet sich der Befehlshow inpip an.

Stellen Sie vor dem Deinstallieren eines Pakets sicher, dass Sie den Befehlshow für dieses Paket ausführen:

$ pip show requests

Name: requests
Version: 2.21.0
Summary: Python HTTP for Humans.
Home-page: http://python-requests.org
Author: Kenneth Reitz
Author-email: [email protected]
License: Apache 2.0
Location: c:\users\isaac\projects\virtualenv\py37\lib\site-packages
Requires: urllib3, certifi, chardet, idna
Required-by:

Beachten Sie die letzten beiden FelderRequires undRequired-by. Der Befehlshow sagt uns, dassrequestsurllib3,certifi,chardet undidna erfordert. Sie möchten diese beiden wahrscheinlich deinstallieren. Sie können auch sehen, dassrequests von keinem anderen Paket benötigt wird, sodass es sicher deinstalliert werden kann.

Sie sollten den Befehlshow für alle Abhängigkeiten vonrequestsausführen, um sicherzustellen, dass keine anderen Bibliotheken ebenfalls von ihnen abhängig sind. Sobald Sie die Abhängigkeitsreihenfolge der Pakete verstanden haben, die Sie deinstallieren möchten, können Sie sie mit dem Befehluninstall entfernen:

$ pip uninstall certifi

Uninstalling certifi-2018.11.29:
  Would remove:
    \py37\lib\site-packages\certifi-2018.11.29.dist-info\*
    \py37\lib\site-packages\certifi\*
Proceed (y/n)? y
  Successfully uninstalled certifi-2018.11.29

Wenn Sie ein Paket deinstallieren, werden Ihnen die Dateien angezeigt, die entfernt werden, und Sie werden um Bestätigung gebeten. Wenn Sie sicher sind, dass Sie das Paket entfernen möchten, weil Sie seine Abhängigkeiten überprüft haben und wissen, dass nichts anderes es verwendet, können Sie einen-y-Schalter übergeben, um die Dateiliste und die Bestätigung zu unterdrücken:

$ pip uninstall urllib3 -y

Uninstalling urllib3-1.24.1:
  Successfully uninstalled urllib3-1.24.1

$ pip uninstall chardet -y

Uninstalling chardet-3.0.4:
  Successfully uninstalled chardet-3.0.4

$ pip uninstall idna -y

Uninstalling idna-2.8:
  Successfully uninstalled idna-2.8

$ pip uninstall requests -y

Uninstalling requests-2.21.0:
  Successfully uninstalled requests-2.21.0

Sie können alle Pakete, die Sie deinstallieren möchten, in einem einzigen Aufruf angeben:pip uninstall -y urllib3 chardet idna requests.

Sie können auch alle in einer Anforderungsdatei aufgeführten Pakete deinstallieren, indem Sie die Option-r <requirments file> angeben. Der Befehl fordert zur Bestätigung jedes einzelnen Pakets auf. Sie können ihn jedoch mit dem Schalter-yunterdrücken, wenn Sie wissen, was Sie tun:

$ pip uninstall -r requirements.txt -y

Uninstalling certifi-2018.11.29:
  Successfully uninstalled certifi-2018.11.29
Uninstalling chardet-3.0.4:
  Successfully uninstalled chardet-3.0.4
Uninstalling idna-2.8:
  Successfully uninstalled idna-2.8
Uninstalling requests-2.21.0:
  Successfully uninstalled requests-2.21.0
Uninstalling urllib3-1.24.1:
  Successfully uninstalled urllib3-1.24.1

Denken Sie daran, immer die Abhängigkeiten der Pakete zu überprüfen, die Sie deinstallieren möchten. Sie möchten wahrscheinlich alle Abhängigkeiten deinstallieren, aber wenn Sie ein Paket deinstallieren, das von anderen verwendet wird, wird Ihre Anwendung beschädigt.

Alternativen zupip

pip ist ein wesentliches Werkzeug für alle Pythonisten und wird von vielen Anwendungen und Projekten für die Paketverwaltung verwendet. Dieses Tutorial hat Ihnen bei den Grundlagen geholfen, aber die Python-Community ist sehr aktiv darin, großartige Tools und Bibliotheken für andere Entwickler bereitzustellen. Dazu gehören andere Alternativen zupip, die versuchen, die Paketverwaltung zu vereinfachen und zu verbessern.

In diesem Abschnitt erfahren Sie mehr über andere für Python verfügbare Paketverwaltungstools.

Conda macht alles

Conda ist ein Paket-, Abhängigkeits- und Umgebungsmanager für viele Sprachen, einschließlich Python. Tatsächlich stammt sein Ursprung vonAnaconda, das als Data Science-Paket für Python begann.

Conda wird häufig für Data Science- und maschinelle Lernanwendungen verwendet und verwendet seine eigenenindex, um kompatible Pakete zu hosten.

Mit Conda können Sie nicht nur Paketabhängigkeiten verwalten, sondern auch virtuelle Umgebungen für Ihre Anwendungen verwalten, kompatible Python-Distributionen installieren und Ihre Anwendung für die Bereitstellung in der Produktion verpacken.

Setting Up Python for Machine Learning on Windows ist eine großartige Einführung in Conda, die sich mit Paket- und Umgebungsmanagement befasst. Die einzigen Windows-spezifischen Informationen beziehen sich auf die Installation. Daher ist es immer noch relevant, wenn Sie eine andere Betriebssystemplattform verwenden.

Pipenv

Pipenv ist ein weiteres Paketverwaltungstool, das Python das Beste aus allen Verpackungswelten bieten soll. Es gewinnt in der Python-Community viel an Bedeutung, da es die virtuelle Umgebung und die Paketverwaltung in einem einzigen Tool zusammenführt.

Es löst auch einige der häufigsten Probleme, die beim manuellen Verwalten von Abhängigkeiten überpipauftreten, z. B. Versionen von Paketen, Trennen von Entwicklungs- und Produktionsabhängigkeiten und Sperren von Versionen für die Produktion.

Pipenv: A Guide to the New Python Packaging Tool ist ein guter Anfang, um mehr über Pipenv und seinen Ansatz zur Paketverwaltung zu erfahren. Obwohl der Artikel mitintermediate gekennzeichnet ist, kann der Autor den Leser hervorragend darauf hinweisen, dass der Artikel für jeden zugänglich ist, der mit Python beginnt.

Poesie

Poetry ist eine weitere Alternative vonpip, die viel Zugkraft gewinnt. Wie Pipenv vereinfacht es die Verwaltung von Paketversionen und trennt Entwicklungs- und Produktionsabhängigkeiten. Außerdem werden diese Abhängigkeiten in einer virtuellen Umgebung isoliert.

Wenn Sie ausJavaScript undnpm kommen, kommt Ihnen die Poesie sehr bekannt vor. Es geht über die Paketverwaltung hinaus und hilft Ihnen beim Erstellen von Distributionen für Ihre Anwendungen und Bibliotheken und deren Bereitstellung auf PyPI. How to Publish an Open-Source Python Package to PyPI hat ein gutesintroduction to Poetry und kann Ihnen den Einstieg erleichtern.

Schlussfolgerung: Was istpip?

Dieses Tutorial beantwortete die Frage, was ist Pip? Sie haben gesehen, dasspip ein Paketmanager für Python ist, der von vielen Projekten zum Verwalten von Abhängigkeiten verwendet wird. Es ist im Python-Installationsprogramm enthalten, was es für alle Pythonisten zu einem unverzichtbaren Werkzeug macht, um zu wissen, wie man es benutzt.

Python bietet eine umfangreiche Standardbibliothek, die für die Entwicklung aller Arten von Anwendungen geeignet ist. Die aktive Python-Community bietet jedoch eine noch größere Anzahl von Tools und Bibliotheken, die die Entwicklung von Python-Anwendungen beschleunigen.

Diese Tools und Bibliotheken werden inPython Package Index (PyPI) veröffentlicht, undpip ermöglicht Entwicklern, sie in ihren Anwendungsumgebungen zu installieren.

In diesem Tutorial haben Sie Folgendes gelernt:

  • Installieren neuer Pakete mitpip in der Befehlszeile und mit Anforderungsdateien

  • Verwalten von Abhängigkeiten, Trennen von Entwicklungs- und Produktionsanforderungen und Erstellen einer gesperrten Anforderungsdatei

  • Suchen von Paketen überpip und PyPI

  • Auswerten der Paketabhängigkeiten vor der Deinstallation eines Pakets und wiepip Pakete deinstalliert

Darüber hinaus haben Sie gelernt, wie wichtig es ist, Abhängigkeiten auf dem neuesten Stand zu halten und Alternativen zupipzu finden, mit denen Sie diese Abhängigkeiten verwalten können.

Wenn Sie Fragen haben, können Sie sich gerne im Kommentarbereich unten an uns wenden. Weitere Informationen erhalten Sie unterpip documentation page.