Python Lambda运行时出现FileNotFoundError:找不到'config'目录问题
解决Lambda中
os.chdir("config")的FileNotFoundError问题 首先,你提供的信息完全足够复现和定位问题——错误栈、代码片段、目录存在的描述已经把核心线索都给全了,咱们直接来拆解原因和解决方案:
问题核心原因
Lambda函数的执行环境默认工作目录是/var/task/,但这里的关键是:你本地看到的config目录,不一定正确被打包到了Lambda的代码包根目录下,或者你的相对路径依赖出了问题。
哪怕你本地截图显示目录存在,只要打包时config没有被放在zip包的根层级(也就是解压后对应/var/task/config),os.chdir("config")就会找不到目录。另外,os.chdir是依赖当前工作目录的操作,虽然Lambda默认工作目录是/var/task,但用相对路径本来就不够可靠,很容易因为环境细节变化出问题。
具体解决方案
方案1:改用绝对路径(最推荐)
放弃os.chdir,直接通过脚本的绝对路径拼接目标文件路径,彻底规避工作目录的问题:
import os import json def lambda_handler(event, context): print(event) # 获取当前lambda_function.py所在的绝对目录 current_dir = os.path.dirname(os.path.abspath(__file__)) # 拼接secrets.json的完整路径 secrets_path = os.path.join(current_dir, "config", "secrets.json") with open(secrets_path, "r") as f: loginInfo = json.load(f) return loginInfo
方案2:确认打包结构并修复
如果你坚持要用os.chdir,请确保你的代码包结构正确:
- 本地打包时,要把
lambda_function.py和config目录放在同一层级,然后用递归命令打包:zip -r lambda_deploy.zip lambda_function.py config/ - 上传后,可以在Lambda控制台的"代码"标签页,查看左侧文件浏览器里是否存在
config目录——如果看不到,说明打包时没包含进去。
额外排查点
- 检查你上传的代码包是最新的,有没有可能误传了旧的、缺少
config目录的zip包? - 虽然概率极低,但可以确认Lambda执行角色是否有读取代码包文件的权限(一般默认权限是足够的)。
内容的提问来源于stack exchange,提问作者Matt M
相关产品推荐
相关产品推荐

