Python 2.7中'import urllib3.util'失败?
我正在处理一个别人写的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