2016-11-07 13 views
5

Mam wbudowaną aplikację do obsługi aplikacji do ładowania danych do tabeli BigQuery przy użyciu mechanizmu uruchamiania aplikacji Google, ale gdy uruchamiam ją na hoście lokalnym lub w chmurze, otrzymuję moduł o nazwie Brak Chmura podczas używania google.cloud importować komunikat o błędzie bigquery w pliku dziennika. Zainstalowałem bibliotekę klienta Google Cloud, ale nadal daje mi ten sam błąd. proszę zobaczyć poniżej kod używamBrak modułu o nazwie chmura podczas używania google.cloud import bigquery

---main.py plik zawiera

import argparse 
import time 
import uuid 

from google.cloud import bigquery 

def load_data_from_gcs(dataset_name, table_name, source): 
    bigquery_client = bigquery.Client() 
    dataset = bigquery_client.dataset(dataset_name) 
    table = dataset.table(table_name) 
    job_name = str(uuid.uuid4()) 

    job = bigquery_client.load_table_from_storage(
     job_name, table, source) 

    job.begin() 

    wait_for_job(job) 

    print('Loaded {} rows into {}:{}.'.format(
     job.output_rows, dataset_name, table_name)) 


def wait_for_job(job): 
    while True: 
     job.reload() 
     if job.state == 'DONE': 
      if job.error_result: 
       raise RuntimeError(job.error_result) 
      return 
     time.sleep(1) 


if __name__ == '__main__': 
    parser = argparse.ArgumentParser(
     description=__doc__, 
     formatter_class=argparse.RawDescriptionHelpFormatter) 
    parser.add_argument('Test') 
    parser.add_argument('mytable') 
    parser.add_argument('gs://week/geninfo.csv') 

    args = parser.parse_args() 

    load_data_from_gcs(
     args.dataset_name, 
     args.table_name, 
     args.source) 

--app.yaml plik zawiera następujący kod

application: mycloudproject 
version: 1 
runtime: python27 
api_version: 1 
threadsafe: yes 

handlers: 
- url: /favicon\.ico 
    static_files: favicon.ico 
    upload: favicon\.ico 

- url: .* 
    script: main.app 

Proszę dać mi znać, co jest zaginął lub czy robię coś źle tutaj?

+0

Prawdopodobny duplikat [app engin e projekt ładowania danych do bigquery nie działa] (http://stackoverflow.com/questions/40418201/app-engine-project-to-load-data-into-bigquery-not-working) –

+0

Czy możesz udostępnić wynik 'python -v'? To może pomóc ci zobaczyć, jakie moduły załadowałeś i skąd. –

+0

dane wyjściowe zawierają zbyt wiele znaków i nie pozwalają na umieszczanie ich tutaj. czy istnieje inny sposób udostępniania mojego pliku? – LondonUK

Odpowiedz

-1

Czy na pewno zaktualizowałeś najnowszą wersję biblioteki? Wersja zainstalowana przez pip może być nieaktualna. Poprzednio moduł był importowany jako:

from gcloud import bigquery 

Jeśli to działa, używasz starszej wersji. Aby zainstalować najnowszą wersję, polecam odciągnięcie od wzorca w postaci github project.

+0

Tak, wczytałem bibliotekę wczoraj i to nadal nie działa.Zmieniłem również instrukcję importu do tej, którą zasugerowałeś z gcloud import bigquery, ale nadal nie działa i wyświetla mi komunikat o błędzie ImportError: Brak modułu o nazwie gcloud – LondonUK

3

Może to być nieco trudne. Google Cloud korzysta z nowego formatu przestrzeni nazw Pythona (jeśli spojrzysz na źródło, zauważysz, że w strukturze katalogów nie ma __init__.py).

ten został zmieniony w Pythonie 3.3 z PEP-420

szczęście w Pythonie 2.7 można to łatwo naprawić poprzez unikanie importu ukryte. Wystarczy dodać to na początku pliku:

from __future__ import absolute_import

nadzieję, że pomoże.

0

Znajdź katalog zawierający google/cloud/... i dodaj ten katalog do PYTHONPATH, aby Python mógł go znaleźć. Zobacz: this post, aby uzyskać szczegółowe informacje na temat dodawania do PYTHONPATH. Przedstawia on dwa popularne sposoby to zrobić:

Oto jak to zrobić za pomocą polecenia bash:

export PYTHONPATH=$PYTHONPATH:/<path_to_modules> 

Albo można dołączyć go do ścieżki w skrypcie:

# if the google/ directory is in the directory /path/to/directory/ 
path_to_look_for_module = '/path/to/directory/' 
import sys 
if not path_to_look_for_module in sys.path: 
    sys.path.append(path_to_look_for_module) 

Jeśli to nie działa, oto kod znaleziony w jednym z moich projektów do importowania modułów Google Appengine:

def fixup_paths(path): 
    """Adds GAE SDK path to system path and appends it to the google path 
    if that already exists.""" 
    # Not all Google packages are inside namespace packages, which means 
    # there might be another non-namespace package named `google` already on 
    # the path and simply appending the App Engine SDK to the path will not 
    # work since the other package will get discovered and used first. 
    # This emulates namespace packages by first searching if a `google` package 
    # exists by importing it, and if so appending to its module search path. 
    try: 
     import google 
     google.__path__.append("{0}/google".format(path)) 
    except ImportError: 
     pass 

    sys.path.insert(0, path) 

# and then call later in your code: 
fixup_paths(path_to_google_sdk) 
from google.cloud import bigquery 
Powiązane problemy