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也不会删除孤立的文件。人们将需要手动清理它们。

https://stackoverflow.com/questions/51913361/difference-between-pip-install-options-ignore-installed-and-force-reinstall/51916623

https://www.coder.work/article/94633

如果觉得我的文章对你有用,请随意赞赏