Google App Engine - 大查询 - Python 找不到库 google.cloud

Posted

技术标签:

【中文标题】Google App Engine - 大查询 - Python 找不到库 google.cloud【英文标题】:Google App Engine - Big Query - Python can't find libraries google.cloud 【发布时间】:2017-07-19 01:17:31 【问题描述】:

我正在使用 Eclipse 和 PyDev 在 Ubuntu Linux 16.4 上使用 Python 构建一个 App Engine 项目。

我正在使用运行良好的 Flask 框架,我想做的是连接到 Big Query,这就是我遇到问题的地方。

所以我用过:

pip install --upgrade google-cloud-bigquery

要安装大查询库,我可以看到/usr/local/lib/python2.7/dist-packages中的包

由于某种原因 Eclipse 似乎不认为该库已注册,我可以忍受,但是当我运行我的项目 dev_appserver.py 时,App Engine 找不到该库:

我的 Python PyDev 中有这个:

这很奇怪,好像我添加了from lib.google.cloud import bigquery PyDev 解析,dist-packages 在 PyDev 路径中,所以我不明白为什么它不捡起来。

您还会注意到我已经注释掉了 apiclient.discoveryoauth2client.client,我打算尝试另一种方式,但 App Engine 抱怨它找不到 SignedJwtAssertionCredentials 库,所以我确定这就是全部链接并由相同的问题引起。

在我的appengine_config.py 我有:

【问题讨论】:

因为sdk和google-cloud包都包含google文件夹。 @MattStannard 你找到解决问题的方法了吗?我也面临同样的情况。 【参考方案1】:

如果您想使用未包含在this 列表中的第三方库,则必须手动添加它们。

为了手动包含任何其他库,您必须将它们放在 app.yaml 所在的目录中。因此,例如,如果您具有以下结构:

hello
├── libs
│   └── bs4 
├── hello.py 
└── app.yaml

然后在你的 hello.py 中你必须把这两行放在文件的开头:

import sys
sys.path.insert(0, 'libs')

完成此操作后,您将能够使用要放入该 libs 目录中的任何第 3 方库。例如:

from bs4 import BeautifulSoup

【讨论】:

感谢您的回复。 @dan - 事实上,如果您查看我的 appengine_config.py 屏幕截图,我已经尝试过了,您会发现它符合您的建议。勇敢 - 我已经厌倦了它实际上不起作用【参考方案2】:

虽然@Bravin 走在正确的道路上,但vendoring in 3rd party libraries 的推荐 程序有点不同:

    创建一个目录来存储您的第三方库,例如lib/

    mkdir lib
    

    使用带有-t <directory> 标志的pip(版本6 或更高版本)将库复制到您在上一步中创建的文件夹中。 例如:

     pip install -t lib/ <library_name>
    

    Using Homebrew Python on Mac OS X?

    在与您的 app.yaml 文件相同的文件夹中创建一个名为 appengine_config.py 的文件。

    编辑appengine_config.py 文件并将您的库目录提供给vendor.add() 方法。

    # appengine_config.py
    from google.appengine.ext import vendor
    
    # Add any libraries install in the "lib" folder.
    vendor.add('lib')
    

【讨论】:

感谢您的回复。【参考方案3】:

(2021 年 6 月):OP 和各种响应中似乎有些混乱,所以让我们为 Python 2 用户说清楚:

    google-cloud-bigquery 添加到requirements.txt 创建appengine_config.py 以匹配Step 4 on this page(您似乎拥有) 从main.py 中删除带有apiclientgoogleapiclientoauth2client 的行(错误的客户端库) 运行pip2 install -t lib -r requirements.txt(如果您没有安装Python 3,则只运行pip注意:Python 3 用户不必玩这些游戏...上面的第 1 步就是您需要做的全部...没有appengine_config.py 文件,没有运行pip install,也没有@ 987654334@文件夹。

对于更广泛的受众,请参阅my answer to this more general question。

【讨论】:

以上是关于Google App Engine - 大查询 - Python 找不到库 google.cloud的主要内容,如果未能解决你的问题,请参考以下文章

Google App Engine 祖先查询

Google App Engine 地理查询

如何在 Google App Engine Python 上的 Django nonrel 中使用查询游标?

python 有效地翻页查询以从Google App Engine数据存储中获取所有实体。

为啥我在 Google App Engine 上使用 JDO 的查询中出现转换错误?

如何减少 Google App Engine 数据存储延迟?