簡體   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