云功能-无法找到模块

时间:2019-01-09 21:31:30

标签: python beautifulsoup google-cloud-platform google-cloud-functions

部署Cloud Function时出现错误提示。

Deployment failure:
Function load error: 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 256, 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 166, 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 2, in <module>
    from bs4 import BeautifulSoup
ModuleNotFoundError: No module named 'bs4'

这是我打包的zip结构的样子:

.
├── main.py
└── requirements.txt

这是我的requirements.txt的样子:

beautifulsoup4==4.7.1
boto3==1.9.75
botocore==1.12.75
cachetools==3.0.0
certifi==2018.11.29
chardet==3.0.4
docutils==0.14
google-api-core==1.7.0
google-auth==1.6.2
google-cloud-core==0.29.1
google-cloud-datastore==1.7.3
google-resumable-media==0.3.2
googleapis-common-protos==1.5.5
grpcio==1.17.1
idna==2.8
jmespath==0.9.3
protobuf==3.6.1
pyasn1==0.4.5
pyasn1-modules==0.2.3
python-dateutil==2.7.5
pytz==2018.9
requests==2.21.0
rsa==4.0
s3transfer==0.1.13
six==1.12.0
soupsieve==1.6.2
urllib3==1.24.1

这就是我在bs4中导入main.py模块的方式:

from bs4 import BeautifulSoup
import requests
from datetime import datetime
import boto3
import re

根据documentation,Requirements.txt文件必须与包含您的功能代码的main.py文件位于同一目录中。您可以看到它是

请注意,这在我的本地系统上正常运行。

该功能附带的服务帐户具有以下角色:

Cloud Datastore User
Storage Admin

当我从控制台转到Cloud Functions UI时。我可以在source标签中看到main.py和requirements.txt都显示正确的内容。

我在这里想念什么?

更新

找出问题所在。如果我在requirements.txt文件中提到beautifulsoup4==4.7.1,它将失败。但是,如果我没有在其中指定版本号,它就可以工作。 beautifulsoup4

不确定为什么。有想法吗?

1 个答案:

答案 0 :(得分:0)

在我的情况下,我将汤定义为:

this.backHandler = BackHandler.addEventListener('hardwareBackPress', () => BackHandler.exitApp())

调用汤时遇到错误(说汤没有定义)。将lxml添加到我的soup = BeautifulSoup(response.content, features="xml") 中解决了该问题。