Jim*_*Ott 6 python google-cloud-platform google-cloud-functions
我正在将 Python 函数部署为 Google Cloud Function。它在本地测试良好,并毫无怨言地部署到 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.
Run Code Online (Sandbox Code Playgroud)
我的requirements.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
Run Code Online (Sandbox Code Playgroud)
以下是云函数日志的更多详细信息...
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.
"
Run Code Online (Sandbox Code Playgroud)
我要拔头发了!和想法?
谢谢!
更新
为了消除其他可能的影响,我创建了一个最小函数来演示该问题。以前,当 Google BigQuery API 尝试使用 pandas 时,我只会在执行函数时看到错误。现在,我通过在 main.py 中添加导入将问题移至前台。现在,我在尝试部署该函数时遇到了失败(不必再等到运行时)。
主要.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!'
Run Code Online (Sandbox Code Playgroud)
要求.txt
pandas
Run Code Online (Sandbox Code Playgroud)
部署命令...
gcloud functions deploy hello_world --runtime python37 --trigger-http
Run Code Online (Sandbox Code Playgroud)
错误
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'
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
补充笔记:
有没有可能是客户端的问题?我不这么认为,但我对 Python 是全新的,我觉得我在某个时候对我的 Python 安装做了一些奇怪的事情,而且我不知道部署时云 SDK 是否在幕后使用了其中的一些内容。
鉴于OP尝试创建一个最小的函数来测试在Cloud Functions中工作的pandas但没有成功,我认为发布一个对任何尝试执行相同过程的人有用的答案将是有帮助和相关的。这样可以消除当前访问者的疑虑,因为该问题由于通用标题而不断受到访问。
由于 OP 尝试从本地计算机部署其功能,因此需要安装 GCP Cloud SDK。这可以按照文档完成。由于我是从头开始执行此操作的(在 Debian 10 中,使用 Python 3.7.3),因此这些是我在文档中使用的命令:
添加Cloud SDK包源:
echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
Run Code Online (Sandbox Code Playgroud)
导入 GCP 公钥
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key --keyring /usr/share/keyrings/cloud.google.gpg add -
Run Code Online (Sandbox Code Playgroud)
安装云SDK
sudo apt-get update && sudo apt-get install google-cloud-sdk
Run Code Online (Sandbox Code Playgroud)
使用以下命令查看已安装的实用程序gcloud components list:
安装 SDK 后,您必须使用运行的帐户凭据进行身份验证gcloud auth login。这将打开一个浏览器窗口供您授予访问权限。通过身份验证后,选择要部署云功能的项目gcloud config set project <PROJECT_NAME>
我保持这个功能相当简单,以使这个答案对于一般用户来说不那么复杂,因为OP也尝试了一个最小的例子但没有成功。我使用了 GCP文档和 pandas示例中的示例代码。唯一需要的依赖项是pandas,但您也可以在本地安装flask并functions-framework测试功能。
主要.py
echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
Run Code Online (Sandbox Code Playgroud)
要求.txt
pandas
flask
Run Code Online (Sandbox Code Playgroud)
最后,我在包含以下内容的同一目录中使用了以下部署命令main.py:
gcloud functions deploy pandas-gcp-test --entry-point pandas_http --runtime python37 --trigger-http
Run Code Online (Sandbox Code Playgroud)
部署后,它会按预期工作,通过从 Cloud Console 检查内置函数测试器,该函数正确输出数据帧,并且 pandas 实际上在该函数内运行:
| 归档时间: |
|
| 查看次数: |
9964 次 |
| 最近记录: |