【问题标题】:Python urllib3 error - ImportError: cannot import name UnrewindableBodyErrorPython urllib3 错误 - ImportError:无法导入名称 UnrewindableBodyError
【发布时间】:2019-03-12 21:20:51
【问题描述】:

我将我的 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 和运行脚本所需的包)后,我正在尝试 import requests 它向我显示错误:-

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 安装了所有软件包。

【问题讨论】:

    标签: python python-3.x python-2.7 python-requests urllib3


    【解决方案1】:

    异常导入 UnrewindableBodyError ImportError: 无法导入 名称 UnrewindableBodyError

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

    sudo pip uninstall urllib3
    sudo pip install --upgrade urllib3
    

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

    我建议使用 pip 而不是 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 更新发生在操作系统级别时,请始终使用虚拟环境以避免冲突。

    【讨论】:

      【解决方案2】:

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

      一个很好的例子可以找到here

      这方面的一个例子是:

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

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

          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 重命名为其他名称,这似乎解决了问题。

          【讨论】:

            【解决方案5】:

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

            解决方法:

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

            干杯

            奥利弗

            【讨论】:

              猜你喜欢
              • 2021-12-21
              • 1970-01-01
              • 1970-01-01
              • 2014-12-19
              • 1970-01-01
              • 2019-08-06
              • 1970-01-01
              相关资源
              最近更新 更多