【问题标题】:Python pip: ImportError cannot import name 'ensure_str' from 'six'. On multiple pip commandsPython pip:ImportError 无法从“六”导入名称“ensure_str”。在多个 pip 命令上
【发布时间】:2020-08-26 21:01:43
【问题描述】:

当我第一次想为 python3 安装 tqdm 包时,我注意到出了点问题。运行pip install tqdm我重温了

ImportError: cannot import name 'ensure_str' from 'six' (/home/carl/.local/lib/python3.8/site-packages/six.py).

在运行pip freezepip list等各种pip命令时似乎也出现了类似的问题,但pip show [package]pip -h却没有。

我不确定从哪里开始以及如何处理这种情况,非常感谢帮助。我将在下面发布完整的跟踪信息。

完整的回溯: pip install [any package]

Traceback (most recent call last):
  File "/usr/bin/pip", line 11, in <module>
    load_entry_point('pip==20.0.2', 'console_scripts', 'pip')()
  File "/usr/lib/python3.8/site-packages/pip/_internal/cli/main.py", line 73, in main
    command = create_command(cmd_name, isolated=("--isolated" in cmd_args))
  File "/usr/lib/python3.8/site-packages/pip/_internal/commands/__init__.py", line 96, in create_command
    module = importlib.import_module(module_path)
  File "/usr/lib/python3.8/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 783, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/usr/lib/python3.8/site-packages/pip/_internal/commands/install.py", line 24, in <module>
    from pip._internal.cli.req_command import RequirementCommand
  File "/usr/lib/python3.8/site-packages/pip/_internal/cli/req_command.py", line 20, in <module>
    from pip._internal.operations.prepare import RequirementPreparer
  File "/usr/lib/python3.8/site-packages/pip/_internal/operations/prepare.py", line 16, in <module>
    from pip._internal.distributions import (
  File "/usr/lib/python3.8/site-packages/pip/_internal/distributions/__init__.py", line 2, in <module>
    from pip._internal.distributions.wheel import WheelDistribution
  File "/usr/lib/python3.8/site-packages/pip/_internal/distributions/wheel.py", line 5, in <module>
    from pip._internal.utils.wheel import pkg_resources_distribution_for_wheel
  File "/usr/lib/python3.8/site-packages/pip/_internal/utils/wheel.py", line 12, in <module>
    from pip._vendor.six import PY2, ensure_str
ImportError: cannot import name 'ensure_str' from 'six' (/home/carl/.local/lib/python3.8/site-packages/six.py) 

回溯:pip freeze

Traceback (most recent call last):
  File "/usr/bin/pip", line 11, in <module>
    load_entry_point('pip==20.0.2', 'console_scripts', 'pip')()
  File "/usr/lib/python3.8/site-packages/pip/_internal/cli/main.py", line 73, in main
    command = create_command(cmd_name, isolated=("--isolated" in cmd_args))
  File "/usr/lib/python3.8/site-packages/pip/_internal/commands/__init__.py", line 96, in create_command
    module = importlib.import_module(module_path)
  File "/usr/lib/python3.8/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 783, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/usr/lib/python3.8/site-packages/pip/_internal/commands/freeze.py", line 12, in <module>
    from pip._internal.operations.freeze import freeze
  File "/usr/lib/python3.8/site-packages/pip/_internal/operations/freeze.py", line 17, in <module>
    from pip._internal.req.constructors import (
  File "/usr/lib/python3.8/site-packages/pip/_internal/req/__init__.py", line 11, in <module>
    from .req_file import parse_requirements
  File "/usr/lib/python3.8/site-packages/pip/_internal/req/req_file.py", line 25, in <module>
    from pip._internal.req.constructors import (
  File "/usr/lib/python3.8/site-packages/pip/_internal/req/constructors.py", line 28, in <module>
    from pip._internal.req.req_install import InstallRequirement
  File "/usr/lib/python3.8/site-packages/pip/_internal/req/req_install.py", line 30, in <module>
    from pip._internal.operations.install.wheel import install_wheel
  File "/usr/lib/python3.8/site-packages/pip/_internal/operations/install/wheel.py", line 33, in <module>
    from pip._internal.utils.wheel import parse_wheel
  File "/usr/lib/python3.8/site-packages/pip/_internal/utils/wheel.py", line 12, in <module>
    from pip._vendor.six import PY2, ensure_str
ImportError: cannot import name 'ensure_str' from 'six' (/home/carl/.local/lib/python3.8/site-packages/six.py)

编辑: 有人建议我看看https://stackoverflow.com/a/57262415/13516940。它说'ensure_str'包含在六个1.12及更高版本中,但是我只有1.11版本。这就解释了为什么找不到它。但是我无法通过例如运行pip install --upgrade sixpip uninstall sixpip check six 来解决此问题。因为这些命令中的任何一个都会给出相同的“无法导入名称”错误。帮助解决这个问题将不胜感激。

【问题讨论】:

  • 升级你的six。如果您无法使用pip 升级它,请从pypi.org/project/six/#files 升级它
  • 感谢大家的支持!我已经设法更准确地定位现在的错误。只要我以前做sudo,它就可以做所有事情。这是因为six 安装在根/usr/lib/python3.8/site-packages/ 中。然而 pip 试图在/home/myname/.local/lib/python3.8/...... 中找到它,可能是因为我之前曾尝试让pip 在没有 sudo 的情况下工作。关于如何将所有内容从 /usr/lib/ 迁移到 /home/myname/.local/lib 有什么好的提示吗?
  • 要升级six而不使用pip:下载six-1.14.0.tar.gz,解压并运行python setup.py install
  • 我终于解决了感谢@phd 的帮助,我无法使用python setup install --user 但是我强制安装在/home/myname/.loval/ib/python3.8/site-packages/ 中进行,然后我获取了新的 Six.py 文件并替换那里出错的那个。

标签: python-3.x pip six


【解决方案1】:

从代码附带的requirements.txt 文件安装时,我在虚拟环境中遇到了这个问题。我的系统 Python (3.8.5) 运行得很好,在系统上我有six==1.14.0,但 requirements.txt 文件有six==1.11.0。因此,每当我在我的 venv 中运行 pip install -r requirements.txt 时,事情就会中断,因为它会安装旧版本的 6。

我的解决方案是删除我创建的第一个 venv,将requirements.txt 中的行更改为six==1.14.0(工作版本),重建我的 venv,然后使用新修改的 requirements.txt 文件进行安装。事后看来,这似乎是常识,但当时我并没有想到。简而言之:不要用旧的、不兼容的版本覆盖 6 的工作版本。

【讨论】:

    【解决方案2】:
    1. 打开文件/home/carl/.local/lib/python3.8/site-packages/six.py
    2. https://github.com/benjaminp/six/blob/master/six.py中的文件内容替换为最新版本

    它对我有用。

    取自:https://www.reddit.com/r/learnpython/comments/igsaza/importerror_cannot_import_name_ensure_str_from/g2vqftq/?utm_source=reddit&utm_medium=web2x&context=3

    【讨论】:

      【解决方案3】:

      我的问题是 PyCharm 无法安装任何软件包,我使用了 @HaroldMideros 的答案,除了位置是 $pycharm_install_dir/plugins/python/helpers/six.py

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-10-11
        • 2020-09-04
        • 1970-01-01
        • 2020-03-30
        相关资源
        最近更新 更多