【问题标题】:ImportError: No module named 'requests.packages.urllib3' arises when deploying to GAEImportError:部署到 GAE 时没有出现名为“requests.packages.urllib3”的模块
【发布时间】:2015-03-09 02:02:28
【问题描述】:

我有一些 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'

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

【问题讨论】:

  • 我假设具有 site.addsitedir(...) 的模块位于项目的根目录中,并且它在 tweetpy 之前被导入?
  • 你在 GAE 上安装了tweetpy 吗? (pip install tweetpy)
  • @mgilson 是的,没错!
  • @vishen 是的,Tweepy 安装在 GAE 项目根目录下的 /lib 目录中
  • @neonhash,我也遇到了同样的问题,你解决了吗?

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


【解决方案1】:

将请求更新为 >= v2.20.0

从支持urllib3 v1.24requests v2.20.0 开始,这不再是问题 - 修复了这个问题。

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

pip install requests -U

解决问题

【讨论】:

    【解决方案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 进行测试是行不通的,但如果您启用了计费功能(它使用套接字),它将在生产环境中工作。

    【讨论】:

      猜你喜欢
      • 2018-02-20
      • 1970-01-01
      • 1970-01-01
      • 2015-09-02
      • 1970-01-01
      • 1970-01-01
      • 2019-01-30
      • 1970-01-01
      • 2018-09-07
      相关资源
      最近更新 更多