ImportError: В AppEngine нет модуля с именем cloud, python - PullRequest
0 голосов
/ 15 апреля 2020

У меня проблема, когда я пытаюсь выполнить свой скрипт.py через приложение только из библиотеки "из google.cloud import bigquery", я пробую некоторые решения, но у меня не было пути успеха, я показываю вам сценарии, которые я использую для выполнения этого сценария.

Это мой сценарий:

import json
import datetime
import webapp2
from google.cloud import bigquery
from google.appengine.ext import vendor
vendor.add('lib')

filename = "example.json"

def date_format(time):
        if time.find(".") != -1:
            time = time[:time.find(".")]
        date = datetime.datetime.strptime(time,"%Y-%m-%d %H:%M:%S")
        return date.strftime("%Y%m%d")


class MainPage(webapp2.RequestHandler):
    def get(self):
        self.response.headers['Content-Type'] = 'text/plain'
        with open(filename) as file:
            array = []
            jsonData = json.load(file)
            d = str(date_format(jsonData['e']))
            self.response.write('Hello AppEngine from script! :: '+d)

            client = bigquery.Client()

            QUERY = (           
                    'SELECT field FROM `table` WHERE date='+d+' LIMIT 10'
                    )
            query_job = client.query(QUERY)
            rows = query_job.result()
            for row in rows:
                print(row.field)


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

Это мой app.yaml:

runtime: python27
api_version: 1
threadsafe: true

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

Это мои требования.txt:

google-api-python-client
google-cloud

У меня есть каталог lib с библиотекой bigquery: google_cloud_bigquery-1.24.0.dist-info. и другие библиотеки с google_cloud

Я не знаю, правильный ли мой код, потому что я видел некоторые решения, но что-нибудь помогло запустить скрипт с appengine.

Надеюсь, вы можете помочь мне, пожалуйста.

Это скрипт с python 3

import google.cloud.bigquery as bigquery
# [START gae_python37_app]
from flask import Flask
from google.appengine.ext import vendor
vendor.add('lib')


# If `entrypoint` is not defined in app.yaml, App Engine will look for an app
# called `app` in `main.py`.
app = Flask(__name__)

@app.route('/')
def hello():
    """Return a friendly HTTP greeting."""
    client = bigquery.Client()
    QUERY = (           
            'SELECT ev FROM `table` WHERE f="20200201" LIMIT 10'
            )
    query_job = client.query(QUERY)
    rows = query_job.result()
    for row in rows:
        return row.ev


if __name__ == '__main__':
    # This is used when running locally only. When deploying to Google App
    # Engine, a webserver process such as Gunicorn will serve the app. This
    # can be configured by adding an `entrypoint` to app.yaml.
    app.run(host='127.0.0.1', port=8080, debug=True)
# [END gae_python37_app]

1 Ответ

0 голосов
/ 15 апреля 2020

Вы используете среду выполнения App Engine Standard Python 2.7. Эта среда выполнения не позволяет указывать зависимости с помощью файла requirements.txt.

Вместо этого следует следовать этому руководству, чтобы предоставить поставщику любые зависимости, такие как google-cloud-bigquery, вместе с приложением: https://cloud.google.com/appengine/docs/standard/python/tools/using-libraries-python-27

Вам может понадобиться полностью удалить любой существующий каталог lib и начать заново.

Также обратите внимание, что пакет google-cloud устарел, вы не должны используйте это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...