Python Функция Google Cloud не будет установлена ​​Pandas - PullRequest
1 голос
/ 04 апреля 2020

Я развертываю функцию Python в качестве облачной функции Google. Он локально тестирует и развертывает в GCP без жалоб. Однако, когда я на самом деле выполняю его, он падает с ...

Error: function terminated. Recommended action: inspect logs for termination reason. Details:
The pandas library is not installed, please install pandas to use the to_dataframe() function.

Мой файл require.txt выглядит следующим образом (и проверил, что он действительно загружается при развертывании функции) ...

appdirs==1.4.3
APScheduler==3.6.3
beautifulsoup4==4.8.2
cachetools==4.0.0
certifi==2019.11.28
chardet==3.0.4
click==7.1.1
distlib==0.3.0
filelock==3.0.12
Flask==1.1.1
google-api-core==1.16.0
google-api-python-client==1.8.0
google-auth==1.12.0
google-auth-httplib2==0.0.3
google-cloud-bigquery==1.24.0
google-cloud-core==1.3.0
google-cloud-storage==1.26.0
google-resumable-media==0.5.0
googleapis-common-protos==1.51.0
grpcio==1.27.2
httplib2==0.17.0
idna==2.9
itsdangerous==1.1.0
Jinja2==2.11.1
MarkupSafe==1.1.1
numpy==1.18.2
pandas==1.0.3
pipenv==2018.11.26
protobuf==3.11.3
pyasn1==0.4.8
pyasn1-modules==0.2.8
python-dateutil==2.8.1
pytz==2019.3
requests==2.23.0
rsa==4.0
six==1.14.0
soupsieve==2.0
tzlocal==2.0.0
uritemplate==3.0.1
urllib3==1.25.8
virtualenv==20.0.15
virtualenv-clone==0.5.4
Werkzeug==1.0.1
wget==3.2

Вот еще несколько подробностей из журнала облачных функций ...

 severity: "ERROR"  
 textPayload: "Traceback (most recent call last):
  File "/env/local/lib/python3.7/site-packages/google/cloud/functions/worker.py", line 383, in run_background_function
    _function_handler.invoke_user_function(event_object)
  File "/env/local/lib/python3.7/site-packages/google/cloud/functions/worker.py", line 217, in invoke_user_function
    return call_user_function(request_or_event)
  File "/env/local/lib/python3.7/site-packages/google/cloud/functions/worker.py", line 214, in call_user_function
    event_context.Context(**request_or_event.context))
  File "/user_code/main.py", line 27, in sync_nyt_counties
    macdata()
  File "/user_code/main.py", line 108, in macdata
    df = query_job.to_dataframe()
  File "/env/local/lib/python3.7/site-packages/google/cloud/bigquery/job.py", line 3374, in to_dataframe
    create_bqstorage_client=create_bqstorage_client,
  File "/env/local/lib/python3.7/site-packages/google/cloud/bigquery/table.py", line 1706, in to_dataframe
    raise ValueError(_NO_PANDAS_ERROR)
ValueError: The pandas library is not installed, please install pandas to use the to_dataframe() function.
" 

Я вырываю волосы! И идеи?

Спасибо!

Обновление

Чтобы устранить другие возможные влияния, я создал минимальную функцию для демонстрации проблемы. Ранее я видел ошибку только при выполнении функции, когда Google BigQuery API пытался использовать pandas. Теперь я перенес проблему на передний план, добавив импорт в свой main.py. Теперь я получаю ошибку при попытке развернуть функцию (больше не нужно ждать, пока время выполнения).

main.py

import pandas as pd

def hello_world(request):
    """Responds to any HTTP request.
    Args:
        request (flask.Request): HTTP request object.
    Returns:
        The response text or any set of values that can be turned into a
        Response object using
        `make_response <http://flask.pocoo.org/docs/1.0/api/#flask.Flask.make_response>`.
    """
    request_json = request.get_json()
    if request.args and 'message' in request.args:
        return request.args.get('message')
    elif request_json and 'message' in request_json:
        return request_json['message']
    else:
        return f'Hello World!'

needs.txt

pandas

Команда развертывания ...

gcloud functions deploy hello_world --runtime python37 --trigger-http

Ошибка

Deploying function (may take a while - up to 2 minutes)...failed.
ERROR: (gcloud.functions.deploy) OperationError: code=3, message=Function failed on loading user code. Error message: Code in file main.py can't be loaded.
Did you list all required modules in requirements.txt?
Detailed stack trace: Traceback (most recent call last):
  File "/env/local/lib/python3.7/site-packages/google/cloud/functions/worker.py", line 305, in check_or_load_user_function
    _function_handler.load_user_function()
  File "/env/local/lib/python3.7/site-packages/google/cloud/functions/worker.py", line 184, in load_user_function
    spec.loader.exec_module(main)
  File "<frozen importlib._bootstrap_external>", line 728, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/user_code/main.py", line 1, in <module>
    import pandas as pd
ModuleNotFoundError: No module named 'pandas'

Версия gcloud

Google Cloud SDK 287.0.0
alpha 2019.05.17
beta 2019.05.17
bq 2.0.56
core 2020.03.30
gsutil 4.49

Дополнительные примечания:

  • Я запускаю это на Windows 10
  • Я подумал, может быть, у меня что-то пошло не так в моем проекте GCP, поэтому я попытался развернуть это в другом проекте. Тот же результат!

Возможно ли, что это проблема, связанная со стороной клиента? Я бы так не думал, но я новичок в Python и чувствую, что в какой-то момент я сделал некоторые странные вещи с моей Python установкой, и я не знаю, использует ли облачный SDK некоторые из них позади сцены при развертывании.

1 Ответ

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

Я заработал, удалив файлы Pipfile и Pipfile.lock, которые находились в той же директории, что и мой main.py

Я новичок в Python и, наверное, мне нужно немного изучить что они делают и как они туда попали! Но удаление их, похоже, решило эту проблему.

Спасибо за вашу помощь Дастин и Денис.

...