繁体   English   中英

Python urllib3 错误 - 导入错误:无法导入名称 UnrewindableBodyError

[英]Python urllib3 error - ImportError: cannot import name UnrewindableBodyError

我设置我的 cronjob 在特定时间调用我的脚本( ex- 2 4 5 10 * python3 mayank/exp/test.py )。 当我的test.py被调用时,我将在我的 test.py 脚本中激活 virtualenv,如下所示。

activate = "/home/myserver/schedule_py3/bin/activate_this.py"
exec(open(activate).read())

激活虚拟环境(其中包含 python3 和运行脚本所需的包)后,我尝试导入请求,它显示的错误为:-

File "schedule_module/Schedule/notification_task.py", line 2, in <module>
    import requests
  File "/usr/lib/python2.7/site-packages/requests/__init__.py", line 43, in <module>
    import urllib3
  File "/usr/lib/python2.7/site-packages/urllib3/__init__.py", line 10, in <module>
    from .connectionpool import (
  File "/usr/lib/python2.7/site-packages/urllib3/connectionpool.py", line 31, in <module>
    from .connection import (
  File "/usr/lib/python2.7/site-packages/urllib3/connection.py", line 45, in <module>
    from .util.ssl_ import (
  File "/usr/lib/python2.7/site-packages/urllib3/util/__init__.py", line 4, in <module>
    from .request import make_headers
  File "/usr/lib/python2.7/site-packages/urllib3/util/request.py", line 5, in <module>
    from ..exceptions import UnrewindableBodyError
ImportError: cannot import name UnrewindableBodyError

正如我所看到的,它正在使用 python2.7。 谁能告诉我我错在哪里?

注意- 我已经在我的虚拟环境中使用 pip3 安装了所有软件包。

异常导入 UnrewindableBodyError 导入错误:无法导入名称 UnrewindableBodyError

上面的错误很可能是由于“ urllib3 ”包被破坏了。 卸载/安装将解决问题:

sudo pip uninstall urllib3
sudo pip install --upgrade urllib3

另一个问题可能是, urllib3通过pip安装,请求通过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 安装这两个软件包:

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

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

您可能想查看激活虚拟环境的方法。

一个很好的例子可以在这里找到

这方面的一个例子是:

ex- 2 4 5 10 * /home/myserver/schedule_py3/<PATH TO VIRTUALENV PYTHON> <FULL PATH TO SCRIPT>mayank/exp/test.py

因为您使用系统 python 而不是 virtualenv'ed。 首先使用激活,然后使用 env 文件夹中的 python。

2 4 5 10 * source /home/myserver/schedule_py3/bin/activate_this.py && python something_else.py

我得到了一个稍微不同的错误:

cannot import name 'HTTPConnectionPool' from 'urllib3.connectionpool'

它是由 b/c 引起的,我的应用程序中有一个名为queue.py的文件。

来自 urllib3 的env/lib/python3.7/site-packages/urllib3/packages/six.py试图运行

import queue

但不是导入正确的 queue.py,而是导入我的 queue.py!

我将queue.py重命名为其他内容,这似乎解决了问题。

在我的服务器中,我们使用 root 权限安装了所有软件包,但在其他帐户中使用。 我遇到过这种错误。

解决方法如下:

sudo chmod 755 -R /usr/lib/python2.7/site-packages/

干杯

奥利弗

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM