В облачных функциях Google нет модуля с именем psycopg2._psycopg2 - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть функция Google Cloud, которая использует Google Cloud SQL через psycopg2.У меня есть файл psycopg2 в моем файле require.txt, но как только сервис обновляется, я получаю сообщение об ошибке No module named psycopg2._psycopg2.

Это проблема с библиотеками C psycopg2, работающими в среде Cloud Function ?Как это исправить?

main.py

import psycopg2

def postgres_demo(request):
    return "hi"

needs.txt

psycopg2==2.8.2

serverless.yml

service: gcf-python-v2

provider:
    name: google
    stage: dev
    runtime: python37
    region: us-central1
    project: my-project
    credentials: ~/.gcloud/keyfile.json

plugins:
    - serverless-google-cloudfunctions
    - serverless-python-requirements

custom:
    pythonRequirements:
        pythonBin: python3

package:
    exclude:
        - node_modules/**
        - .gitignore
        - .git/**

functions:
    second:
        handler: postgres_demo
        events:
            - http: path

Запуск serverless deploy всегда приводит к:

Deployment failed: RESOURCE_ERROR

 {"ResourceType":"cloudfunctions.v1beta2.function","ResourceErrorCode":"400","ResourceErrorMessage":"Function failed on loading user code. Error message: Code in file main.py can't be loaded.\nDid you list all required modules in requirements.txt?\nDetailed stack trace: Traceback (most recent call last):\n  File \"/env/local/lib/python3.7/site-packages/google/cloud/functions/worker.py\", line 305, in check_or_load_user_function\n    _function_handler.load_user_function()\n  File \"/env/local/lib/python3.7/site-packages/google/cloud/functions/worker.py\", line 184, in load_user_function\n    spec.loader.exec_module(main)\n  File \"<frozen importlib._bootstrap_external>\", line 728, in exec_module\n  File \"<frozen importlib._bootstrap>\", line 219, in _call_with_frames_removed\n  File \"/user_code/main.py\", line 1, in <module>\n    import psycopg2\n  File \"/user_code/psycopg2/__init__.py\", line 50, in <module>\n    from psycopg2._psycopg import (                     # noqa\nModuleNotFoundError: No module named 'psycopg2._psycopg'\n"}

1 Ответ

2 голосов
/ 25 апреля 2019

Я решил это, удалив python-serverless-requirements в целом и используя опцию package без сервера, чтобы убедиться, что только main.py и requirements.txt были включены в zip-файл.

Облако Google устанавливает пакеты в файл require.txt, поэтому вам не нужен безсерверный плагин.Облако Google также имеет необходимые библиотеки C для psycopg2.

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