You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python3.7环境下Google Cloud Function安装fbprophet构建Wheel失败求助

解决Google Cloud Functions中Python3.7环境安装fbprophet的依赖错误

你遇到的核心问题是pip构建隔离机制导致的依赖加载异常:fbprophet的setup.py在编译wheel阶段需要导入numpy,但pip默认的构建隔离环境里还没安装numpy——哪怕你已经在requirements.txt里声明了它。下面是几个可行的解决方案:

方案1:跳过pip的构建隔离(快速生效)

Google Cloud Functions允许通过构建环境变量禁用pip的构建隔离,这样安装过程会直接使用当前环境的依赖,确保numpy在fbprophet安装前已就绪。部署时执行以下命令:

gcloud functions deploy YOUR_FUNCTION_NAME \
  --runtime python37 \
  --trigger-http \
  --requirements requirements.txt \
  --set-build-env-vars PIP_NO_BUILD_ISOLATION=1

替换YOUR_FUNCTION_NAME为你的函数名,根据你的触发器类型调整--trigger-http(比如Pub/Sub触发器换成--trigger-topic YOUR_TOPIC)。

方案2:用pyproject.toml指定构建依赖(推荐)

创建一个pyproject.toml文件放在你的函数代码根目录,内容如下:

[build-system]
requires = ["setuptools", "wheel", "numpy", "pandas"]
build-backend = "setuptools.build_meta"

这个文件会告诉pip:在构建任何包的wheel之前,必须先安装numpypandas,这样fbprophet的setup.py执行时就能找到所需依赖了。部署时正常使用gcloud functions deploy命令即可,无需额外参数。

方案3:使用预编译的fbprophet Wheel(避免编译耗时)

如果前两个方案仍有问题,你可以在本地模拟Cloud Functions的Linux环境(比如Ubuntu 18.04,Python3.7的CF环境基于该系统)预编译fbprophet的wheel文件,再和代码一起上传:

  1. 在本地Ubuntu 18.04环境(或Docker容器)安装Python3.7,运行:
    pip wheel fbprophet==YOUR_LOCAL_VERSION
    
  2. 把生成的.whl文件复制到函数代码目录
  3. 修改requirements.txt,将fbprophet替换成本地wheel的路径:
    cython
    pystan
    numpy
    pandas==1.0.3
    google-cloud-storage==1.29.0
    ./fbprophet-0.7.1-cp37-cp37m-linux_x86_64.whl
    geopy==1.22.0
    google-cloud-bigquery==1.25.0
    

这样pip会直接安装预编译的wheel,无需重新执行fbprophet的构建流程,也就不会触发numpy找不到的错误。

你本地环境能正常运行,是因为本地安装依赖时没有启用构建隔离,或者numpy已经提前存在于环境中;而Cloud Functions的构建环境是全新的,所以暴露了这个问题。

内容的提问来源于stack exchange,提问作者confused_lion

火山引擎 最新活动