Python 2.7中'import urllib3.util'失败?

6 投票
2 回答
29498 浏览
提问于 2025-04-18 04:43

我正在处理一个别人写的Python脚本,想在我自己的开发机器上顺利运行它。

我已经安装了脚本需要的模块(requests、urllib3和oath2),但是我遇到了一个错误,搞得我很头疼;

Traceback (most recent call last):
  File "/home/saeed/ps4/scrape/run.py", line 2, in <module>
    import get_data as gd, time
  File "/home/saeed/ps4/scrape/get_data.py", line 8, in <module>
    import sys, oauth2, requests, json
  File "/usr/local/lib/python2.7/dist-packages/requests/__init__.py", line 58, in <module>
    from . import utils
  File "/usr/local/lib/python2.7/dist-packages/requests/utils.py", line 25, in <module>
    from .compat import parse_http_list as _parse_list_header
  File "/usr/local/lib/python2.7/dist-packages/requests/compat.py", line 7, in <module>
    from .packages import chardet
  File "/usr/local/lib/python2.7/dist-packages/requests/packages/__init__.py", line 3, in <module>
    from . import urllib3
  File "/usr/local/lib/python2.7/dist-packages/requests/packages/urllib3/__init__.py", line 16, in <module>
    from .connectionpool import (
  File "/usr/local/lib/python2.7/dist-packages/requests/packages/urllib3/connectionpool.py", line 36, in <module>
    from .connection import (
  File "/usr/local/lib/python2.7/dist-packages/requests/packages/urllib3/connection.py", line 43, in <module>
    from .util import (
ImportError: No module named util

这个脚本由三个文件组成:run.py、get_data.py和incr.py。在run.py中的导入语句是:

import get_data as gd, time

在get_data.py中:

import sys, oauth2, requests, json

在incr.py中:

import time

我以为我需要安装一个叫做'util'的模块。我找了找这个模块,但没找到,所以我觉得这可能是个更深层次的问题,而不仅仅是安装一个模块。

如果有人能给我指个方向,帮我解决这个问题,我会非常感激。我使用的是Python 2.7.3。

2 个回答

0

使用 pip3 命令来安装或更新 urllib3 这个库,具体的命令是:pip3 install urllib3 --upgrade

16

安装出错

如果你的 urllib3 安装出现问题,导致没有包含 util 这个子模块,你可以直接从 pypi 页面下载压缩包,然后把里面的 util 文件夹复制到你的 urllib3 安装位置。

urllib3 版本过旧

你提到的错误是说在 urllib3 中,相对导入 util 失败了。

我查看了 urllib3 的官网,很可能你安装的是旧版本的 urllib3

根据更新日志:

1.8.2 (2014-04-17)

修复了 urllib3.util 没有包含在包中的问题。

试着用下面的命令更新模块:

sudo pip install urllib3 --upgrade

(或者在你的机器上使用相应的命令)

另一种可能

如果你是在模块内部运行代码,也可能导致失败。这通常被认为是不安全的,应该避免。

确认你加载的是哪个模块

可以通过启动 Python 解释器,检查 urllib3 模块是从哪里加载的;

python -c "import urllib3; print urllib3.__file__"

同样,你也可以检查版本:

python -c "import urllib3; print urllib3.__version__"

手动检查

你还可以检查一下 util 子模块是否在正确的位置;

ls /usr/local/lib/python2.7/dist-packages/requests/packages/urllib3/util

撰写回答