Python, AttributeError: модуль «google.cloud.bigquery» не имеет атрибута «Клиент» после сборки cx_Freeze - PullRequest
0 голосов
/ 17 января 2019

Я пытаюсь использовать cx_Freeze для создания исполняемого файла скрипта, который загружает запрос .sql из той же папки, выполняет его в БД BigQuery и возвращает .csv полученных данных.

  This is what the 'conda list' command gives me:
  google-api-core           1.1.0                      py_0    conda-forge
  google-auth               1.6.2                      py_0    conda-forge
  google-cloud-bigquery     1.8.1                      py_0    conda-forge  
  google-cloud-core         0.28.1                     py_0    conda-forge
  google-resumable-media    0.3.1                      py_0    conda-forge
  googleapis-common-protos  1.5.5                      py_0    conda-forge

Сценарий завершается сбоем в первых строках (KEY и PROJECT_ID указаны в сценарии, но не вставлены в целях безопасности)

from google.cloud import bigquery
client = bigquery.Client.from_service_account_json(KEY, project=PROJECT_ID)

Мой setup.py для cx_Freeze выглядит так:

from cx_Freeze import setup, Executable

setup(name='output_script', executables = [Executable("my_script.py")], version="1.0.0",
options={
         "build exe":{"packages":["google.cloud.bigquery, google.cloud.bigquery.client"]}})

Сборка выполняется успешно, однако, когда я запускаю my_script.exe в папке сборки, я получаю следующую ошибку:

Traceback (most recent call last):
  File "C:\ProgramData\Anaconda3\lib\site-packages\cx_Freeze\initscripts\__startup__.py", line 14, in run
    module.run()
  File "C:\ProgramData\Anaconda3\lib\site-packages\cx_Freeze\initscripts\Console.py", line 26, in run
    exec(code, m.__dict__)
  File "my_script.py", line 15, in <module>
  File "my_script.py", line 7, in queryBigQ
AttributeError: module 'google.cloud.bigquery' has no attribute 'Client'

Попытка переустановки и обновления всех пакетов Google, но безуспешно. Любые указатели будут оценены.

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Вы пытались запустить свой скрипт успешно перед тем, как заморозить его?

Похоже, в вашей локальной среде разработки отсутствует библиотека bigquery. Убедитесь, что вы создали virtualenv и , установили в него библиотеку bigquery .

Проверьте соединение с BigQuery с помощью простого скрипта:

from google.cloud import bigquery

client = bigquery.Client()

QUERY = (
    'SELECT * FROM `[PROJECT_ID].[BQ_INSTANCE].[BQ_TABLE]`'
)
query_job = client.query(QUERY)
rows = query_job.result()

for row in rows:
    print(row)
0 голосов
/ 18 января 2019

Попробуйте с

from google.cloud.bigquery.client import Client
client = Client.from_service_account_json(KEY, project=PROJECT_ID)

или, может быть,

from google.cloud.bigquery import Client
client = Client.from_service_account_json(KEY, project=PROJECT_ID)

в вашем основном скрипте.

Попробуйте также заменить аргумент options в вашем скрипте setup.py на

options={"build exe": {"packages": ["google"]}}
...