Azure Functions部署后无法引用Python项目中共享库c_lib的问题
Azure Functions部署后无法引用Python项目中共享库c_lib的问题
嘿,我之前也踩过类似的坑——本地测试全过,一部署到Azure就找不到共享库,给你几个实用的解决思路,应该能帮你搞定:
1. 先确认部署后的文件结构是否正确
首先得搞清楚Azure上的文件是不是传全了。你可以通过Azure门户的高级工具(Kudu)(在Function App的「开发工具」里找),进入/home/site/wwwroot/目录检查:
- 能不能看到
c_lib文件夹? FunctionA的位置是不是和c_lib保持了本地的层级关系?
如果c_lib没出现在wwwroot里,那肯定找不到。这时候要调整部署配置:
- 用VS Code部署的话,检查
.vscode/settings.json里的azureFunctions.deploySubpath,要设为项目根目录(比如./),而不是只部署a_app; - 用Azure CLI的
func deploy命令时,确保在myproject根目录下执行,这样所有子目录都会被上传。
2. 手动添加Python搜索路径(快速救急)
如果c_lib已经在wwwroot里,但Python还是找不到,大概率是运行时的sys.path没包含c_lib所在的目录。你可以在FunctionA/__init__.py的最开头加上这段代码:
import sys import os # 根据部署后的目录层级调整路径,比如c_lib和FunctionA在wwwroot同层级时用这行 sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '../')))
这段代码会把wwwroot目录加入Python的搜索路径,之后from c_lib.foundation_utility.jwt_enforced_permissions import JWTEnforcedPermissions就能正常找到模块了。
3. 把c_lib打包成本地包(更规范的长期方案)
如果不想每次都手动改路径,可以把c_lib变成可安装的本地Python包:
- 在
c_lib目录下创建setup.py文件,内容如下:
from setuptools import setup, find_packages setup( name="c_lib", version="0.1", packages=find_packages(), )
- 在项目根目录的
requirements.txt里加一行:
-e ./c_lib
这样不管是本地测试还是部署到Azure,pip都会把c_lib安装到Python的site-packages里,之后的导入语句就和普通第三方包一样,不用再担心路径问题。
4. 检查Python版本是否一致
最后别忘了确认Azure上的Python版本和你本地开发用的版本完全一致,版本不兼容也可能导致奇怪的导入错误。你可以在Function App的「配置」页面查看和调整Python版本。
备注:内容来源于stack exchange,提问作者steambun
相关产品推荐
相关产品推荐

