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

Azure Functions偶发certifi TLS CA证书路径错误的永久解决方案咨询

Azure Functions certifi TLS证书错误永久解决方案

针对你遇到的偶尔出现OSError: Could not find a suitable TLS CA certificate bundle, invalid path: /home/site/wwwroot/.python_packages/lib/site-packages/certifi/cacert.pem的问题,以下是几个可行的永久解决方案:

  • 固定certifi版本
    在requirements.txt中明确指定certifi的具体版本(比如certifi==2024.2.2),避免依赖自动更新导致的文件结构或路径变动。部署时Azure Functions会严格安装指定版本,减少版本迭代带来的兼容性问题。

  • 切换使用系统级CA证书
    Azure Functions Linux环境自带系统CA证书,路径为/etc/ssl/certs/ca-certificates.crt。在函数代码初始化阶段添加环境变量配置,强制使用系统证书替代certifi包内的证书:

    import os
    # 为requests库指定证书路径
    os.environ['REQUESTS_CA_BUNDLE'] = '/etc/ssl/certs/ca-certificates.crt'
    # 全局指定SSL证书路径
    os.environ['SSL_CERT_FILE'] = '/etc/ssl/certs/ca-certificates.crt'
    

    这样可以彻底绕开certifi包内文件可能出现的缺失问题。

  • 切换至更稳定的托管计划
    消耗计划下的Azure Functions实例会被动态回收,临时文件系统可能出现文件丢失或路径异常。如果业务允许,切换到Premium计划或Dedicated(App Service)计划,这类计划提供持久化的文件系统,能大幅降低依赖文件缺失的概率。

  • 预打包依赖后部署
    避免依赖Azure Functions在线安装依赖,本地提前打包所有依赖:

    1. 在本地执行pip install -t ./python_packages -r requirements.txt,将所有依赖下载到指定目录
    2. 将函数代码和python_packages目录一起打包为zip文件
    3. 通过Azure门户或CLI上传zip包部署
      这种方式能确保certifi的cacert.pem文件被完整部署到Functions实例,减少在线安装时的文件遗漏风险。
  • 添加错误重试逻辑
    针对请求类代码添加重试机制,当遇到该OSError时自动重试,降低业务中断影响。可以使用tenacity库实现:

    from tenacity import retry, stop_after_attempt, wait_exponential, retry_if_exception_type
    import requests
    
    @retry(
        stop=stop_after_attempt(3),
        wait=wait_exponential(multiplier=1, min=2, max=10),
        retry=retry_if_exception_type(OSError)
    )
    def send_request():
        resp = requests.get("https://your-target-api.com")
        resp.raise_for_status()
        return resp.json()
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 04:32:25