当前位置: 首页 > 面试题库 >

点安装选项“忽略安装”和“强制重新安装”之间的区别

林修真
2023-03-14
问题内容

pip install与重新安装软件包有关的两个选项是--ignore-installed--force-reinstall

这两个选项在官方文档中描述如下

--force-reinstall
Reinstall all packages even if they are already up-to-date.

-I, --ignore-installed
Ignore the installed packages (reinstalling instead).

似乎它们都忽略了某些东西并进行了重新安装,但是我不能说出它们之间的区别(如果我实际执行它们,我可以看到一些区别……但是我无法解释)。如果我搜索“以pip强制重新安装软件包”,结果将同时列出--ignore-installed--force-reinstall,这使我很困惑。


问题答案:

--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重命名spameggs。运行时pip install pkgname==2.0 --ignore- installedspam.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不会删除孤立的文件。人们将需要手动清理它们。



 类似资料:
  • 问题内容: 有什么方法可以强制安装pip python软件包,而忽略所有无法满足的依赖关系吗? (我不在乎这样做有多“错”,我只需要这样做,除了逻辑和推理之外……) 问题答案: 点有一个开关。您应该使用它。 有关更多信息,请运行,在这里您将看到以下行:

  • 我使用的是ZF2 skeleton应用程序,它有一个.gitignore,可以防止外部库提交到git。在调试过程中,我喜欢在库的源代码中到处更改内容,以了解如何工作。如果这些是版本控制的,将很容易将它们恢复到原始状态。 如何强制Composer重新安装特定的框架,以便再次获得新的未修改副本? PS:请不要建议删除.gitignore文件,因为它存在是有原因的;它阻止我的第三方库进入我的应用程序存储

  • 我已经在谷歌上搜索过了,但还是不清楚。请分享你的想法。

  • JVM 选项可以通过设置环境变量来更改. 您可以使用 GRADLE_OPTS 或者 JAVA_OPTS. JAVA_OPTS 是一个用于 JAVA 应用的环境变量. 一个典型的用例是在 JAVA_OPTS 里设置HTTP代理服务器(proxy), GRADLE_OPTS 是内存选项. 这些变量可以在 gradle 的一开始就设置或者通过 gradlew 脚本来设置.

  • 问题内容: 和之间有什么区别? 问题答案: 作曲家更新 将更新您在中指定的依赖关系 例如,如果您需要此软件包作为依赖项: 并且您实际上已经安装了该软件包的版本,运行将导致该软件包的升级(例如,如果已经发布,则升级为)。 详细将: 读 删除不再需要的已安装软件包 检查所需软件包最新版本的可用性 安装最新版本的软件包 更新以存储已安装的软件包版本 作曲家安装 不会更新任何东西;它只会安装文件中指定的所