模块导入失败:如何在 Google Cloud SDK 上将 Google Cloud 客户端库获取到 运行

Module import failing: How to get Google Cloud Client libraries to run on Google Cloud SDK

问题

我正在尝试开发一个基本的 Google App Engine 应用程序。我从事大量数据科学工作,因此我使用 Anaconda 来管理我的 python 发行版。

最近我一直在尝试设置 Google Cloud SDK + Google Cloud Client Libraries 以在 GAE 上(在标准环境中)进行开发,但无法将两者结合使用一起发挥作用。

我已经激活了 Python 2.7 env (py27),当我尝试 运行 一个基本应用程序时,我收到以下错误:

  File "C:\Users\dominic\Anaconda3\envs\py27\lib\site-packages\google\cloud\bigquery\__init__.py", line 31, in <module>
    from pkg_resources import get_distribution
ImportError: No module named pkg_resources

但是该模块存在于 py27

从 SDK 提供的交互式控制台,我可以看到它正在执行 python:

的正确版本

import sys, os
print(os.path.dirname(sys.executable))

Returns: C:\Users\dominic\Anaconda3\envs\py27

所以我不明白为什么它找不到那个特定的库。我认为这可能与必须在 App Engine 中 install any non-third party libraries into lib (in the standard environment), as only a certain set are pre-loaded 有关(因此可能是云 SDK?),但是当我尝试导入一些预加载的库时,如 flaskfutures(也安装在这个python环境中,这些也失败了)。

如何让 Google Cloud 客户端库在 Cloud SDK 中运行?

我尝试过的其他东西

我已经尝试将 python 的特定版本添加到我的 PYTHONPATH,以防它与 Anaconda 管理我的路径有关,但是那 Python 完全:

Error processing line 1 of C:\Users\dominic\Anaconda3\lib\site-packages\matplotlib-2.0.2-py3.6-nspkg.pth:

Failed to import the site module
Traceback (most recent call last):
  File "C:\Users\dominic\Anaconda3\lib\site.py", line 168, in addpackage
    exec(line)
  File "<string>", line 1, in <module>
  File "C:\Users\dominic\Anaconda3\lib\types.py", line 171, in <module>
    import functools as _functools
  File "C:\Users\dominic\Anaconda3\lib\functools.py", line 21, in <module>
    from collections import namedtuple
  File "C:\Users\dominic\Anaconda3\lib\collections\__init__.py", line 32, in <module>
    from reprlib import recursive_repr as _recursive_repr
  File "C:\Users\dominic\Anaconda3\envs\py27\Lib\site-packages\reprlib\__init__.py", line 7, in <module>
    raise ImportError('This package should not be accessible on Python 3. '
ImportError: This package should not be accessible on Python 3. Either you are trying to run from the python-future src folder or your installation of python-future is corrupted.

我需要将 Anaconda 作为我的主要 python 安装(出于工作目的),但我也希望能够使用 Cloud SDK 进行开发。

环境

google-cloud-bigquery 库不是 GAE 为标准环境提供的库,因此您需要 vendor it 到您的应用程序中(GAE 不关心它是否安装到您的本地 python 安装)。您的回溯表明它来自本地安装,请注意其中的 py27\lib\site-packages\google\cloud\bigquery 字符串。

这里还需要注意的是,标准环境仅支持为 GAE 设计的应用程序,通过沙箱执行,而不支持通用的独立应用程序。目前尚不清楚您尝试的基本应用程序是一种类型还是另一种类型。参见

至于 flask 或其他 GAE 提供的库,您需要 request them in your app.yaml file (personally I'd use an explicit version in there instead of latest, I think I saw some issues reported possibly related to latest). To be noted here that some of these libraries/versions aren't installed by default in the cloud SDK, the additional app-engine-python-extras component may need to be installed, see PyCharm - Can't create App Engine Application using DJango

至于你最后一次尝试:

  • 以防万一不清楚,请注意标准环境仅支持 python 2.7,python 3 将不起作用。 This package should not be accessible on Python 3 字符串可能表明尝试可能已使用 python 3 完成。您需要明确使用 python 2.7 可执行文件,因为您的主要版本是 python 3.
  • matplotlib 是少数几个 GAE 提供的库之一,需要特别注意使用 SDK 进行本地开发,请参阅 Using built-in bundled libraries with the local development server