【问题标题】:Module import failing: How to get Google Cloud Client libraries to run on Google Cloud SDK模块导入失败:如何让 Google Cloud 客户端库在 Google Cloud SDK 上运行
【发布时间】:2018-02-07 01:03:09
【问题描述】:

问题

我正在尝试开发一个基本的 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))

返回:C:\Users\dominic\Anaconda3\envs\py27

所以我不明白为什么它找不到那个特定的库。我认为这可能与 install any non-third party libraries into lib (在标准环境中)有关,因为只有 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 进行开发。

环境

  • Windows 7
  • 蟒蛇安装蟒蛇。
  • Python 3.6 是主要版本
  • 我正在开发一个 conda py27 环境。
  • Google Cloud SDK 已安装并通过身份验证
  • google-cloud-bigquery 安装到 py27 中

【问题讨论】:

标签: python windows google-app-engine anaconda google-cloud-sdk


【解决方案1】:

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

这里还需要注意的是,标准 env 仅支持为 GAE 设计的应用程序,通过沙盒执行,而不是通用的独立应用程序。目前尚不清楚您尝试的基本应用程序是否属于一种类型。见import cloudstorage, ImportError: No module named google.appengine.api

至于flask 或其他GAE 提供的库,您需要在app.yaml 文件中添加request them(我个人会在其中使用显式版本而不是latest,我认为 em> 我看到了一些可能与latest 相关的问题。需要注意的是,这些库/版本中有默认未安装在云 SDK 中,可能需要安装额外的app-engine-python-extras 组件,请参阅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

【讨论】:

  • 嘿,这真的很有帮助。因此,为了确保我已经理解:标准环境中包含的所有库都必须包含在 app.yaml 文件中。任何不应该安装到lib。我确实知道我只能使用 python 2.7,但我不确定要使用哪个 env 变量。我误导使用 PYTHONPATH 的尝试是因为我没有遇到 GOOGLE_APPLICATION_CREDENTIALS 进行身份验证。再次感谢丹,真的很感激!
  • 是的。我认为all libraries 是指您需要在应用程序中使用的那些。
  • 哈哈是的。我还没有编写一个需要所有库的应用程序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-13
  • 2020-04-12
相关资源
最近更新 更多