无法在GAE应用中使用google-cloud

时间:2016-09-26 13:35:38

标签: python google-app-engine google-cloud-storage google-cloud-platform

我的Google App Engine应用中的以下行(webapp.py)无法导入Google Cloud库:

from google.cloud import storage

出现以下错误:

ImportError: No module named google.cloud.storage

我做了一些研究,发现以下文章很有帮助:

结合上述文章提出的技术,我做了以下几点:

  1. 创建requirements.txt文件:

    google-cloud==0.19.0
    
  2. 使用pip导入此库:

    pip install -t lib -r requirements.txt
    
  3. 在我的appengine_config.py文件中使用以下代码:

    import os
    import sys
    import google
    libDir = os.path.join(os.path.dirname(__file__), "lib")
    google.__path__.append(os.path.join(libDir, "google"))
    sys.path.insert(0, libDir)
    
  4. 任何人都可以了解我可能缺少的东西以使其正常工作吗?我只是想编写一个可以从Google云存储写入/读取的Google App Engine应用程序,我想在部署之前在本地进行测试。

6 个答案:

答案 0 :(得分:5)

看起来唯一需要的是将google-cloud包含到项目requirements.txt文件中。

检查此简单示例是否适合您(您不应该导致任何导入错误)。 创建以下文件并运行pip install -r requirements.txt -t lib。我的网站上不再需要它来使其工作。

<强>的app.yaml

application: mysample
runtime: python27
api_version: 1
threadsafe: true

handlers:
  - url: /.*
    script: main.app

<强> main.py

import webapp2
from google.cloud import storage


class MainPage(webapp2.RequestHandler):
    def get(self):
        self.response.headers['Content-Type'] = 'text/plain'
        self.response.write('Hello, World!')

app = webapp2.WSGIApplication([
    ('/', MainPage),
], debug=True)

<强> appengine_config.py

from google.appengine.ext import vendor
import os

# Third-party libraries are stored in "lib", vendoring will make
# sure that they are importable by the application.
if os.path.isdir(os.path.join(os.getcwd(), 'lib')):
    vendor.add('lib')

<强> requirements.txt

google-cloud

答案 1 :(得分:3)

App Engine SDK随附App Engine specific Google Cloud Storage API,您可以使用它来处理云存储分区。

import cloudstorage as gcs

您是否有理由不使用此内置库,无需加载配置?

答案 2 :(得分:1)

您的appengine_config.py只需要包含:

from google.appengine.ext import vendor
vendor.add('lib')

你发布的所有其他内容对我来说都很好。

答案 3 :(得分:1)

软件包名称空间似乎已按照此this answer中的指示进行了更改,并且尚未完全修复。您可以安装使用不同命名空间的旧版本(from gcloud import storage )。请改用此导入语句:

pip install --upgrade google-cloud

您还应确保在appengine_config.py中导入供应商库,如magicray的答案所述。

问题似乎已经解决,因为google-cloud版本为0.20.0。所以问题中的import语句应该有效。只需记得运行/var/www/test# ls -l /usr/bin/php* lrwxrwxrwx 1 root root 21 Okt 6 2015 /usr/bin/php -> /etc/alternatives/php -rwxr-xr-x 1 root root 9065192 Jul 26 10:33 /usr/bin/php5 -rwxr-xr-x 1 root root 4422704 Sep 18 10:38 /usr/bin/php7.0 lrwxrwxrwx 1 root root 28 Okt 6 2015 /usr/bin/php-config -> /etc/alternatives/php-config -rwxr-xr-x 1 root root 5237 Jul 26 10:33 /usr/bin/php-config5 lrwxrwxrwx 1 root root 24 Okt 6 2015 /usr/bin/phpize -> /etc/alternatives/phpize -rwxr-xr-x 1 root root 4730 Jul 26 10:33 /usr/bin/phpize5

答案 4 :(得分:0)

你应该移动&#34;导入谷歌&#34;排到sys.path.insert

之后的位置

答案 5 :(得分:0)

我遇到了同样的问题并花了很长时间才解决它。

设置1 : 如果您的app.yaml设置如下:

runtime: python27
api_version: 1
threadsafe: no

handlers:
- url: /.*
  script: main.app

libraries:
- name: jinja2
  version: "2.6"
- name: markupsafe
  version: "0.15

您的main.py已将您的脚本注册为应用:

from flask import Flask
app = Flask(__name__)
app.config['DEBUG'] = True

@app.route('/')
def hello():
    """Return a friendly HTTP greeting."""
    return 'Hello World!'

你应该能够在谷歌云上运行得很好。

设置2 :我如何遇到ImportModule error -
在我的app.yaml文件中,我将script=main.app替换为script=main.app并删除了

from flask import Flask
app = Flask(__name__)
app.config['DEBUG'] = True

来自main.py file。因此,appengine_config.py未运行以设置sys路径。解决方案是您可以按照设置1的模式,或者将以下内容添加到main.py文件中。

from google.appengine.ext import vendor
vendor.add('lib')

然后,应用程序应该有正确的路径来导入第三方软件包。希望能帮助到你。