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的主要内容,如果未能解决你的问题,请参考以下文章