【问题标题】:Pip 21.1 can't import InvalidSchemeCombinationPip 21.1 无法导入 InvalidSchemeCombination
【发布时间】:2021-07-20 05:41:57
【问题描述】:

在工作中,我们使用 Github 操作来构建和测试我们的拉取请求,然后才能获得批准。 周五下午,一切正常。 周一早上,所有的测试都很早就失败了,错误显示 pip 无法再找到自己的异常。最新的 Pip 有什么变化吗?

正如您在下面的错误中看到的那样,我们自己的代码没有被引用,而且我相当肯定我们的流程在周五和周一之间没有任何变化(我们是一个小团队,批准的 PR 没有有什么令人惊讶的地方)。

错误回溯:

Traceback (most recent call last):
    File "/opt/hostedtoolcache/Python/3.7.9/x64/bin/pip", line 5, in <module>
      from pip._internal.cli.main import main
    File "/opt/hostedtoolcache/Python/3.7.9/x64/lib/python3.7/site-packages/pip/_internal/cli/main.py", line 8, in <module>
      from pip._internal.cli.autocompletion import autocomplete
    File "/opt/hostedtoolcache/Python/3.7.9/x64/lib/python3.7/site-packages/pip/_internal/cli/autocompletion.py", line 9, in <module>
      from pip._internal.cli.main_parser import create_main_parser
    File "/opt/hostedtoolcache/Python/3.7.9/x64/lib/python3.7/site-packages/pip/_internal/cli/main_parser.py", line 7, in <module>
      from pip._internal.cli import cmdoptions
    File "/opt/hostedtoolcache/Python/3.7.9/x64/lib/python3.7/site-packages/pip/_internal/cli/cmdoptions.py", line 22, in <module>
      from pip._internal.cli.progress_bars import BAR_TYPES
    File "/opt/hostedtoolcache/Python/3.7.9/x64/lib/python3.7/site-packages/pip/_internal/cli/progress_bars.py", line 9, in <module>
      from pip._internal.utils.logging import get_indentation
    File "/opt/hostedtoolcache/Python/3.7.9/x64/lib/python3.7/site-packages/pip/_internal/utils/logging.py", line 14, in <module>
      from pip._internal.utils.misc import ensure_dir
    File "/opt/hostedtoolcache/Python/3.7.9/x64/lib/python3.7/site-packages/pip/_internal/utils/misc.py", line 29, in <module>
      from pip._internal.locations import get_major_minor_version, site_packages, user_site
    File "/opt/hostedtoolcache/Python/3.7.9/x64/lib/python3.7/site-packages/pip/_internal/locations/__init__.py", line 9, in <module>
      from . import _distutils, _sysconfig
    File "/opt/hostedtoolcache/Python/3.7.9/x64/lib/python3.7/site-packages/pip/_internal/locations/_sysconfig.py", line 8, in <module>
      from pip._internal.exceptions import InvalidSchemeCombination, UserInstallationInvalid
  ImportError: cannot import name 'InvalidSchemeCombination' from 'pip._internal.exceptions' (/opt/hostedtoolcache/Python/3.7.9/x64/lib/python3.7/site-packages/pip/_internal/exceptions.py)
Error: The process '/opt/hostedtoolcache/Python/3.7.9/x64/bin/pip' failed with exit code 1

【问题讨论】:

标签: python pip


【解决方案1】:

对于macOS X,这个问题是我升级自制软件后发生的, 真正对我有用的是这个,

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py

然后

python get-pip.py

根据参考文献中的讨论,似乎只有pip version 21.1.1 解决了这个问题。

参考下面的讨论 https://github.com/pypa/pip/issues/7217

【讨论】:

  • 我遇到了同样的问题。感谢您的评论,我的点子现在再次运行!
  • 当我在 Conda 环境中执行此操作时,我得到以下 Defaulting to user installation because normal site-packages is not writeable。你知道可能是什么原因吗?在其他环境中,这似乎可行。
  • 抱歉,我不确定,但我确信它在我的 conda 环境被激活时对我有用。您可以尝试: - 以 root 用户身份运行命令怎么样(sudo blah blah。) - 检查pip,我的是 /Users/my_name/opt/anaconda3/bin/pip,类似于我的 python /Users/my_name/opt /anaconda3/bin/pip.使用which pip - 停用 conda 环境并首先检查您的 python 版本,再次运行上述命令。 - 重新安装 Anaconda 怎么样?我希望这会有所帮助,祝你好运。
  • 我在使用 kaniko 构建图像时遇到了这个问题,但在 docker build 中不会发生这种情况。在我的 dockerfile 中重新安装 pip 修复了它。
【解决方案2】:

是的,有一个 release 和最后一个 commit 修改该文件是从 2 天前开始的,但很可能它会更旧。

引用 NEWS.rst 似乎正在进行一些迁移:

Process
-------

- Start installation scheme migration from ``distutils`` to ``sysconfig``. A
  warning is implemented to detect differences between the two implementations to
  encourage user reports, so we can avoid breakages before they happen.

不过,最好是submit a bug,以便他们在必要时发布修复程序。

经典解决方法,降级到21.0.1,即21.1之后的下一个最新版本:

pip install pip==21.0.1

更新:

链接OP提交的问题#9880

更新 2:

根据 OP 的问题和其他人在链接问题中的经验进行调整。

不要将-I 标志用于pip install,它用于安装覆盖文件(因此pip install --ignore-installed)你已经存在于您的系统上,而不是真正的升级(安装新版本,然后删除旧版本)。

改为使用-U(即pip install --upgrade)标志,它会做你想做的事。

【讨论】:

  • 谢谢彼得。即使我没有最好的重现细节,我也提交了一个错误。
  • 这对维护人员来说已经足够了,您已经提供了完整的回溯。甚至您运行的命令也可能有助于缩小流程,例如也许它只是一个导致问题的特定包,例如由于奇怪的版本/名称/等。
  • 谢谢大家! FWIW,似乎pip install --ignore-installed pip=={thing} 可能很奇怪,而pip install pip=={thing} 则不然。对该问题添加评论:link
  • 更新--ignore-installed:应该避免这种情况:link
【解决方案3】:

ImportError:无法从“pip._internal.exceptions”导入名称“InvalidSchemeCombination”

此错误背后的原因是 pip 文件已损坏。

100%的解决方法如下:

  1. 首先执行命令:python -m ensurepip --default-pip
  2. https://bootstrap.pypa.io/get-pip.py下载get-pip.py脚本文件
  3. 打开终端/命令提示符(管理员权限),cd到包含下载的get-pip.py文件的文件夹并运行:python get-pip.py
  4. 问题现已解决。

【讨论】:

    【解决方案4】:

    pip install pip==21.0.1 不适用于我的情况。运行此命令仍会引发相同的错误。

    如果您在虚拟环境中工作,则需要将get-pip.py 文件保存在anaconda3\Scripts 目录或anaconda3\envs\[env_name]\Scripts 中。然后,你需要cd到这个目录:

    cd anaconda3\Scripts
    

    运行之后:

    python get-pip.py pip==19.3.1
    

    python get-pip.py pip==21.0.1
    

    【讨论】:

      【解决方案5】:

      我在 linux 上遇到了同样的问题。以下是 debian 或类似版本的解决方案:

      首先下载get-pip.py

      wget https://bootstrap.pypa.io/get-pip.py
      

      或转到url 并将所有内容复制到系统上的新.py 文件中。您可以随意命名,但请确保在下一步中使用相同的文件名。

      然后安装特定版本的pip(与get-pip.py文件在同一目录下执行):

      python get-pip.py pip==21.0.1 #or any other version
      

      【讨论】:

        【解决方案6】:

        pip 命令根本不起作用

        对于 Windows 10,这对我有用:-

        curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
        

        之后

        python get-pip.py
        

        【讨论】:

          【解决方案7】:

          通过conda update anaconda更新 Conda 后遇到此问题

          问题似乎与pip v21.2.4有关

          正如上面所说的 Mahmood G.B.:

          1. 执行命令:python -m ensurepip --default-pip
          2. 转到https://bootstrap.pypa.io/
          3. 右击get-pip.py然后将文件保存到本地目录
          4. 打开一个terminal/command prompt (Admin privileges),cd到文件夹 包含下载的get-pip.py 文件并运行:python get-pip.py
          5. 安装后忽略升级提示

          "警告:您使用的是 pip 版本 21.0;但是,版本 21.3.1 可用。 您应该考虑通过python -m pip install --upgrade pip 命令进行升级”

          【讨论】:

            【解决方案8】:

            对于 Windows 用户,这个问题在我升级到 pip v21.2.4 后发生在我身上,真正对我有用的是这个,

            所以,我删除了旧的 pip v,然后使用 CMD 重新安装 按照以下步骤删除那些旧版本:

            1. 在桌面上,单击或点击任务栏上的文件资源管理器按钮。
            2. 在搜索栏中输入此路径C:\Users\Win\anaconda3\Scripts 或以某种方式安装 python38 的旧版本
            3. 查找名称为pip3,pip3.8,pip3-scriptpip-script 的文件删除这些文件。
            4. 删除这些文件后,使用 cmd 重新安装 pip 即可正常工作。

            【讨论】:

              【解决方案9】:
              curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.py
              
              python get-pip.py
              

              【讨论】:

              • 这看起来很像最佳答案。你能解释一下为什么要使用额外的2.7吗?
              • @Calculuswhiz 如果您使用最佳答案,您就会明白为什么......
              • 这不是我的问题。我问的唯一原因是这个答案出现在低质量答案审查队列中,可能是因为它只是代码,没有解释。这里有 9 个其他答案,最好解释一下为什么它是正确的。
              猜你喜欢
              • 2021-07-30
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-09-16
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多