PAYATHON 2026

Azure Functions Linux 部署 pandas 时如何排查 numpy 导入错误?

数据小许

结论

现有信息不足以确定唯一根因。建议先检查依赖包是否按 Azure Functions 的 Linux Python 3.12 环境构建,以及 ZIP 中的包目录是否正确。你在 Windows 上指定了 manylinux2014_x86_64,但没有明确指定目标 Python 版本和 ABI。由于 ENABLE_ORYX_BUILD=false 和 SCM_DO_BUILD_DURING_DEPLOYMENT=false 都会关闭构建环节,Azure 部署时会直接使用 ZIP 中已有的依赖。

报错提到从 NumPy 源码目录导入,可能是包内容错误或不完整,也可能是导入路径中有同名文件或目录。仅凭这段错误无法判断具体原因。

优先方案:让 Azure 远程构建依赖

本地环境是 Windows,目标环境是 Linux。使用 Azure Functions 支持的远程构建流程,可以让依赖在目标 Linux 环境中安装:

  1. 部署源代码、host.json 和 requirements.txt,不要把 Windows 环境下安装的 .python_packages 一起打包。
  2. 使用支持远程构建的 Functions 部署方式,并按该方式启用远程构建。当前两个构建开关都设为 false,Azure 部署时不会安装 requirements.txt 中的依赖。
  3. 部署完成后,确认应用目录中包含构建流程生成的依赖,并查看部署日志是否有安装失败信息。

如果继续使用 ZIP 部署并自行打包依赖,需要确保包与目标 Linux 和 Python 环境兼容。

本地打包时指定 Python 3.12 目标参数

如果要继续在 Windows 上安装 Linux wheel,可以为 pip 指定目标 Python 版本、实现和 ABI,并使用 Python 3.12 解释器运行 pip:

py -3.12 -m pip install --target=".python_packages/lib/site-packages" -r requirements.txt --only-binary=:all: --upgrade --platform manylinux2014_x86_64 --python-version 3.12 --implementation cp --abi cp312

这会让 pip 根据 CPython 3.12、cp312 ABI 和指定的 Linux 平台选择 wheel。还要确认目标 Functions 环境的架构与 x86_64 相符,并检查 pip 版本是否支持这些参数。也可以在与 Azure 目标环境匹配的 Linux 环境中安装依赖,避免从 Windows 跨平台选取 wheel。

检查 ZIP 包结构和导入路径

ZIP 解压后,顶层应直接包含 function_app.py、host.json、requirements.txt 和 .python_packages,依赖应位于:

.python_packages/lib/site-packages/

确认 ZIP 中没有多套一层项目目录,并检查应用根目录和部署路径中是否有名为 numpy.py、pandas.py 或 numpy 的文件或目录。它们可能遮蔽已安装的包。重新打包前,清理旧的 .python_packages,以免混入 Windows 安装文件或上次构建的内容。

验证部署结果

重新部署后,查看 Azure Functions 的部署日志和应用日志,确认依赖安装或文件上传是否完整。如果仍然报错,可以在 Azure 的 Linux 环境中检查 numpy 的实际加载路径和包文件是否完整,再判断问题是包缺失、目录遮蔽,还是二进制 wheel 与运行环境不匹配。现有的依赖版本和错误信息不足以确认具体原因。

另外,示例中使用了 @app.route,但片段没有展示 app 的创建代码。如果完整文件中也没有定义 app,还需要补上与所用编程模型对应的 FunctionApp 实例。这与 NumPy 导入错误是两个独立问题。

备注:内容仅供参考。