Python 请求 ImportError:无法导入名称 HeaderParsingError

Posted

技术标签:

【中文标题】Python 请求 ImportError:无法导入名称 HeaderParsingError【英文标题】:Python requests ImportError: cannot import name HeaderParsingError 【发布时间】:2016-01-04 08:30:00 【问题描述】:

操作系统:Mac OS X。当我尝试运行以下代码时,出现错误:

ImportError: 无法导入名称 HeaderParsingError

我在代码下方附加了回溯。

我已尝试使用 Google 和其他 *** 解决此问题 20 分钟。我试过跑步:

pip install urllib3 --upgrade

我也尝试过重新安装 requests 包。

它没有帮助。

这似乎是我的请求或 urllib3 包的问题。有没有人遇到过类似的问题?

代码:

import requests
import json


def printResponse(r):
print ' \n'.format(json.dumps(r.json(), sort_keys=True, indent=4,    separators=(',', ': ')), r)


r = requests.get('http://wikitest.orcsoftware.com/rest/api/content',
             params='title': 'new page',
             auth=('seb', '****'))
printResponse(r)
parentPage = r.json()['results'][0]
pageData = 'type': 'comment', 'container': parentPage,
        'body': 'storage': 'value': "<p>A new comment</p>", 'representation': 'storage'
r =    requests.post('http://localhost:8080/confluence/rest/api/content',
              data=json.dumps(pageData),
              auth=('admin', 'admin'),
              headers=('Content-Type': 'application/json'))
printResponse(r)

这是回溯:

Traceback (most recent call last):
  File "/Users/sebastian/OneDrive/orc/restAPI/createSpace.py", line 1, in <module>
    import requests
  File "/Library/Python/2.7/site-packages/requests/__init__.py", line 61, in <module>
    from . import utils
  File "/Library/Python/2.7/site-packages/requests/utils.py", line 25, in <module>
    from .compat import parse_http_list as _parse_list_header
  File "/Library/Python/2.7/site-packages/requests/compat.py", ine 7, in <module>
    from .packages import charade as chardet
  File "/Library/Python/2.7/site-packages/requests/packages/__init__.py", line 3, in <module>
    from . import urllib3
  File "/Library/Python/2.7/site-packages/requests/packages/urllib3/__init__.py", line 16, in <module>
    from .connectionpool import (
  File "/Library/Python/2.7/site-packages/requests/packages/urllib3/connectionpool.py", line 33, in <module>
    from .connection import (
  File "/Library/Python/2.7/site-packages/requests/packages/urllib3/connection.py", line 41, in <module>
    from .util import (
  File "/Library/Python/2.7/site-packages/requests/packages/urllib3/util/__init__.py", line 4, in <module>
    from .response import is_fp_closed
  File "/Library/Python/2.7/site-packages/requests/packages/urllib3/util/response.py", line 3, in <module>
    from ..exceptions import HeaderParsingError
ImportError: cannot import name HeaderParsingError

【问题讨论】:

请格式化您的代码。 @salmanwahed,不确定您的意思。我以推荐的方式包含了代码。选项卡有问题吗?它适用于我的 IDE (pyCharm)。 是代码中的缩进问题。 不确定您是如何进入这种状态的,但您需要重新安装 requests 本身;它在requests/packages 目录中包括 urllib3 的一个版本。 requests/packages/urllib3/exceptions.py 是这里问题的原因。 @MartijnPieters,谢谢,会试试的。 【参考方案1】:

requests 带有自己的urllib3 库副本,位于requests/packages 子目录中。 这个副本不知何故损坏了。

重新安装requests本身;要么升级(你最多有version 2.1.0,给定from .packages import charade as chardet 行),或者重新安装现有版本。

使用pip 重新安装可以使用--force-reinstall 开关完成:

pip install --force-reinstall requests==2.1.0

或强制升级:

pip install --upgrade requests

【讨论】:

对我来说,不是请求 urllib3,而是实际请求,所以 [sudo] pip uninstall urllib3[sudo] pip install urllib3 成功了。 在 RHEL 上遇到了同样的问题,并且强制重新安装了。这意味着请求 librate 被破坏的情况确实经常发生。 我添加了github.com/kennethreitz/requests/issues/3670,因为错误似乎再次发生。【参考方案2】:

我只是尝试使用 pip 发出任何命令时遇到了同样的问题。最后我找到了一个非常简单的解决方案,只需在 pip 之前使用 sudo 即可。

针对上述问题,我使用了以下命令。

sudo pip install --upgrade urllib3

希望这会有所帮助。

【讨论】:

【参考方案3】:

这可能是“urllib3”包本身的问题。卸载/安装将解决问题。

sudo pip uninstall urllib3
sudo pip install --upgrade urllib3

就我而言,错误是:

ImportError: 无法导入名称 UnrewindableBodyError

另一个问题可能是,urllib3 是通过 pip 安装的,而 requests 是通过 yum repo 安装的,或相反亦然。在这种情况下,解决方法是完全删除这些库并通过相同的 repo 安装它。

我推荐 pip over yum 来安装这两个软件包,因为它易于维护并提供更多控制。操作系统修补或 VM 维护活动等所需的任何进一步 yum 更新都不会影响通过 pip 安装的软件包。

首先通过 pip 和 yum 删除“urllib3”和“requests”的所有安装:

sudo pip uninstall urllib3 -y
sudo pip uninstall requests -y
sudo yum remove python-urllib3 -y
sudo yum remove python-requests -y

要拥有单一安装源,请使用以下任一步骤,而不是同时使用。

现在只能通过 pip 安装这两个包:

sudo pip install --upgrade urllib3
sudo pip install --upgrade requests

或者,只使用 yum。如上所述,我更喜欢 pip 而不是 yum。

仅通过 yum 安装这两个软件包:

sudo yum install python-urllib3
sudo yum install python-requests

注意:当 yum 更新发生在操作系统级别时,请始终使用虚拟环境以避免冲突。

【讨论】:

这个解决方案对我有用,尽管我不得不停止仅通过 pip 安装软件包的步骤。当我仅通过 yum 尝试时,它不起作用。 感谢您的反馈,很高兴它有所帮助。我在答案中添加了更多上下文以使其更清晰。

以上是关于Python 请求 ImportError:无法导入名称 HeaderParsingError的主要内容,如果未能解决你的问题,请参考以下文章

由于 ImportError,Python 无法运行:无法导入 MAXREPEAT

ImportError:无法在 python 中导入名称 COMError

ImportError:无法从部分初始化的模块“dash”导入名称“dcc”-python

python aiorpc:“ImportError:无法从'aiorpc.server'导入名称'RPCServer'”

ImportError:无法导入适用于 Python 的 Cloud Firestore 库

Python3.6 ImportError:无法导入名称'main'Linux RHEL6