python3 -m pip install --force-reinstall --ignore-installed
--force-reinstall
Reinstall all packages even if they are already up-to-date.
-I, --ignore-installed
Ignore the installed packages (reinstalling instead).
--force-reinstall
在安装软件包之前,请先将其卸载(如果已安装)。与为软件包及其每个依赖项运行pip uninstall -y dep && pip install dep几乎相同。
--ignore-installed
忽略软件包及其Dep是否已经安装,覆盖已安装的文件。这意味着您可能会遇到--ignore-installed无法卸载文件,而将其永久保留在site-packages中的情况。假设您有提供模块pkgname==1.0的spam:
$ pip show -f pkgname
Name: pkgname
Version: 1.0
...
spam.py
下一版本pkgname==2.0将spam重命名为eggs。运行pip install pkgname==2.0 --ignore-installed时,不会删除spam.py,除非您手动将其删除,否则它将永远变成孤儿。
结果
--force-reinstall应该总是首选;仅当您知道自己在做什么并且确保重新安装将覆盖当前安装的文件时,才使用--ignore-installed。否则,由于sys.path中仍然有陈旧的模块,重新安装后可能会导致模糊的导入错误。
例子
重现最新pip更改的示例,其中所有软件包均移至_internal软件包下:创建一个新的虚拟环境并将pip降级至版本9:
$ mkvirtualenv testenv
$ workon testenv
(testenv) $ pip install "pip<10"
如果现在要通过pip将--force-reinstall升级到最新版本,则将执行干净升级。之后,您将使用_internal和_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
如果您改为使用--ignore-installed进行升级:
(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
使用pip升级--ignore-installed不会先卸载先前的软件包版本,并且由于新的文件结构,新文件并未覆盖旧文件。结果,旧文件现在变成孤立文件,不再被任何程序包拾取。即使是pip uninstall pip也不会删除孤立的文件。人们将需要手动清理它们。
此处评论已关闭