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 vonpip
owie 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-Type
abrufen 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 Paketrequests
in 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 Paketrequests
zu 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.txt
an 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.txt
zu installieren:
# In requirements_dev.txt
-r requirements.txt
pytest>=4.2.0
Beachten Sie, dass Sie genau denselben-r
-Schalter verwenden, um die Produktionsdateirequirements.txt
zu 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:
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
:
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, dassrequests
urllib3
,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 vonrequests
ausfü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-y
unterdrü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 überpip
auftreten, 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 mit
pip
in der Befehlszeile und mit Anforderungsdateien -
Verwalten von Abhängigkeiten, Trennen von Entwicklungs- und Produktionsanforderungen und Erstellen einer gesperrten Anforderungsdatei
-
Suchen von Paketen über
pip
und PyPI -
Auswerten der Paketabhängigkeiten vor der Deinstallation eines Pakets und wie
pip
Pakete deinstalliert
Darüber hinaus haben Sie gelernt, wie wichtig es ist, Abhängigkeiten auf dem neuesten Stand zu halten und Alternativen zupip
zu 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.