You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Functions Python调用私有仓库代码报ModuleNotFoundError如何解决

解决方案

你的报错核心是两个原因:

  1. Python运行时默认的模块搜索路径未包含项目根目录和src目录,无法找到对应包
  2. 你使用了可编辑模式(-e)安装私有包,生成的egg-link路径是Github Runner本地的路径,部署到Azure环境后路径失效,无法指向正确的包位置

方案1:临时修改模块搜索路径(无需改配置,改代码即可)

在HttpTrigger/__init__.py的所有import语句前,加入以下代码,手动把项目根目录和src目录加入搜索路径:

import sys
import os

# 获取当前文件所在目录(即HttpTrigger目录)的父目录,也就是项目根目录
project_root = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
src_path = os.path.join(project_root, "src")

# 把两个路径加入模块搜索列表
sys.path.append(project_root)
sys.path.append(src_path)

添加完成后,直接用绝对导入即可:

from private_git_repo.package.function import 目标函数名

注意:不要使用带..的相对导入写法,Azure Function触发器脚本作为入口执行时,相对导入会触发语法错误


方案2:优化私有包安装方式(无需改代码,一劳永逸)

你当前生成egg-link的原因是requirements.txt里的私有仓库依赖用了-e可编辑安装模式,把requirements.txt里私有仓库的依赖写法修改,去掉-e参数即可,示例写法:

git+https://<你的私有仓库访问凭证>@github.com/你的用户名/私有仓库名.git@版本号#egg=private_git_repo

修改后重新执行安装命令:
pip install -r requirements.txt --target=".python_packages/lib/site-packages"
此时私有包会直接安装到.python_packages/lib/site-packages目录下,不会生成egg-link,部署后直接用import private_git_repo的写法就能正常导包。


方案3:修改Azure Function环境变量(无需改代码和依赖配置)

在Azure Portal的Function应用配置页,添加名为PYTHONPATH的环境变量,值设置为:
/home/site/wwwroot:/home/site/wwwroot/src
保存后重启函数,Azure运行时会自动在以上路径搜索模块,直接用绝对导入即可正常使用。


排查注意事项

  • 确认src/private_git_repo、src/private_git_repo/package目录下都存在空的__init__.py文件,保证目录被识别为Python包
  • 检查Github Actions的部署配置,确认没有配置排除src目录的打包规则,保证src目录会被一起部署到Azure环境

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 05:54:02