Es gibt zwei pip install
Optionen für die Neuinstallation der Pakete, die --ignore-installed
und --force-reinstall
.
Diese beiden Optionen werden im offiziellen Dokument wie folgt beschrieben
--force-reinstall
Reinstall all packages even if they are already up-to-date.
-I, --ignore-installed
Ignore the installed packages (reinstalling instead).
Es scheint, dass sie alle etwas ignorieren und die Neuinstallation durchführen, aber ich kann keinen Unterschied zwischen ihnen feststellen (ich kann einen Unterschied feststellen, wenn ich sie tatsächlich ausführe ... aber ich kann es nicht erklären). Wenn ich nach "Neuinstallation von Paketen in pip erzwingen" suche, werden im Ergebnis beide --ignore-installed
und --force-reinstall
, was mich lange verwirrt.
--force-reinstall
Deinstallieren Sie ein bereits installiertes Paket, bevor Sie es installieren. Das ist so ziemlich das Gleiche wie das Ausführen von pip uninstall -y dep && pip install dep
Für package und jede Abhängigkeit davon.
--ignore-installed
Ignoriert, ob das Paket und seine Abhängigkeiten bereits installiert sind, und überschreibt installierte Dateien. Dies bedeutet, dass Sie eine Situation haben können, in der --ignore-installed
Eine Datei nicht deinstalliert und sie für immer in site-packages
Belässt. Stellen Sie sich vor, Sie haben pkgname==1.0
, Das das Modul spam
bereitstellt:
$ pip show -f pkgname
Name: pkgname
Version: 1.0
...
spam.py
und die nächste Version pkgname==2.0
benannte spam
in eggs
um. Wenn Sie pip install pkgname==2.0 --ignore-installed
Ausführen, wird spam.py
Erst dann entfernt, wenn Sie es manuell entfernen.
--force-reinstall
Sollte immer bevorzugt werden; Verwenden Sie --ignore-installed
nur, wenn Sie weiß was du tust Sind Sie sicher, dass die Neuinstallation die aktuell installierten Dateien überschreibt. Andernfalls können nach der Neuinstallation undeutliche Importfehler auftreten, da veraltete Module in sys.path
Noch verfügbar sind.
Beispiel für die Reproduktion mit den neuesten pip
Änderungen, bei denen alle Pakete unter das Paket _internal
Verschoben wurden: Erstellen Sie eine neue virtuelle Umgebung und stufen Sie pip
auf Version 9 herunter:
$ mkvirtualenv testenv
$ workon testenv
(testenv) $ pip install "pip<10"
Wenn Sie jetzt pip
über --force-reinstall
Auf die neueste Version aktualisieren möchten, wird ein sauberes Upgrade durchgeführt. Danach haben Sie die richtige Paketstruktur mit _internal
Und _vendor
:
(testenv) $ pip install pip --upgrade --force-reinstall
(testenv) $ ls -l $VIRTUAL_ENV/lib/python3.7/site-packages/pip
total 16
-rw-r--r-- 1 hoefling staff 21 19 Aug 11:47 __init__.py
-rw-r--r-- 1 hoefling staff 623 19 Aug 11:47 __main__.py
drwxr-xr-x 4 hoefling staff 128 19 Aug 11:47 __pycache__
drwxr-xr-x 25 hoefling staff 800 19 Aug 11:47 _internal
drwxr-xr-x 26 hoefling staff 832 19 Aug 11:47 _vendor
Wenn Sie das Upgrade stattdessen mit --ignore-installed
Durchführen würden:
(testenv) $ pip install pip --upgrade --ignore-installed
(testenv) $ ls -l $VIRTUAL_ENV/lib/python3.7/site-packages/pip
total 392
-rw-r--r-- 1 hoefling staff 21 19 Aug 12:33 __init__.py
-rw-r--r-- 1 hoefling staff 623 19 Aug 12:33 __main__.py
drwxr-xr-x 14 hoefling staff 448 19 Aug 12:33 __pycache__
drwxr-xr-x 25 hoefling staff 800 19 Aug 12:33 _internal
drwxr-xr-x 28 hoefling staff 896 19 Aug 12:33 _vendor
-rw-r--r-- 1 hoefling staff 11910 19 Aug 12:33 basecommand.py
-rw-r--r-- 1 hoefling staff 10465 19 Aug 12:33 baseparser.py
-rw-r--r-- 1 hoefling staff 16474 19 Aug 12:33 cmdoptions.py
drwxr-xr-x 16 hoefling staff 512 19 Aug 12:33 commands
drwxr-xr-x 5 hoefling staff 160 19 Aug 12:33 compat
-rw-r--r-- 1 hoefling staff 32153 19 Aug 12:33 download.py
-rw-r--r-- 1 hoefling staff 8121 19 Aug 12:33 exceptions.py
-rw-r--r-- 1 hoefling staff 39950 19 Aug 12:33 index.py
-rw-r--r-- 1 hoefling staff 5626 19 Aug 12:33 locations.py
drwxr-xr-x 5 hoefling staff 160 19 Aug 12:33 models
drwxr-xr-x 6 hoefling staff 192 19 Aug 12:33 operations
-rw-r--r-- 1 hoefling staff 10980 19 Aug 12:33 pep425tags.py
drwxr-xr-x 8 hoefling staff 256 19 Aug 12:33 req
-rw-r--r-- 1 hoefling staff 156 19 Aug 12:33 status_codes.py
drwxr-xr-x 16 hoefling staff 512 19 Aug 12:33 utils
drwxr-xr-x 8 hoefling staff 256 19 Aug 12:33 vcs
-rw-r--r-- 1 hoefling staff 32010 19 Aug 12:33 wheel.py
Durch das Aktualisieren von pip
mit --ignore-installed
Wurde die vorherige Paketversion nicht zuerst deinstalliert. Aufgrund der neuen Dateistruktur wurden die alten Dateien nicht durch neue Dateien überschrieben. Infolgedessen werden alte Dateien jetzt verwaist und von keinem Paket mehr abgeholt. Selbst pip uninstall pip
entfernt die verwaisten Dateien nicht. Man müsste sie manuell bereinigen.