ImportError:没有名为' requests.packages.urllib3'在部署到GAE时出现

时间:2015-03-09 02:02:29

标签: python google-app-engine python-2.7

我有一些python代码,我尝试使用第三方模块(tweepy):

...
import tweepy
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)
...

当我在电脑上启动它时效果很好,但如果我尝试使用谷歌应用引擎,我会收到错误:

File "X:\courant\main.py", line 6, in <module>

    import tweepy

  File "X:\courant\lib\tweepy\__init__.py", line 14, in <module>

    from tweepy.api import API

  File "X:\courant\lib\tweepy\api.py", line 12, in <module>

    from tweepy.binder import bind_api

  File "X:\courant\lib\tweepy\binder.py", line 11, in <module>

    import requests

  File "X:\courant\lib\requests\__init__.py", line 58, in <module>

    from . import utils

  File "X:\courant\lib\requests\utils.py", line 26, in <module>

    from .compat import parse_http_list as _parse_list_header

  File "X:\courant\lib\requests\compat.py", line 42, in <module>

    from .packages.urllib3.packages.ordered_dict import OrderedDict

  File "X:\courant\lib\requests\packages\__init__.py", line 83, in load_module

    raise ImportError("No module named '%s'" % (name,))

ImportError: No module named 'requests.packages.urllib3'

Tweepy安装在GAE项目的/ lib目录中,并且/ lib的链接添加在代码中:

import site
import os.path

site.addsitedir(os.path.join(os.path.dirname(__file__), 'lib'))

urllib3存在于lib\requests\packages\urllib3中,但我仍然收到此错误:

ImportError: No module named 'requests.packages.urllib3'

我做错了什么?我不知道..

2 个答案:

答案 0 :(得分:2)

我通过将urllib3添加到/ lib(而不是使用请求附带的那个)并更改compat.py中的行来解决了这个问题:

from .packages.urllib3.packages.ordered_dict import OrderedDict

为:

from urllib3.packages.ordered_dict import OrderedDict

之后还有其他库需要安装,如oauth和ssh(应该通过编辑app.yaml添加,因为Google已经发布了它)。

尝试使用dev_appserver.py进行测试将无效,但如果您启用了计费功能(它使用套接字),它将在生产环境中运行。

答案 1 :(得分:0)

将请求更新为> = v2.20.0

requests v2.20.0开始,该问题不再受支持urllib3 v1.24的问题-解决此问题。

如果像我一样,您安装了Rasbian(或您使用的任何操作系统),但没有安装最新版本的requests run

pip install requests -U

解决问题