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

venv与pyenv环境下命令行运行Python脚本报KeyError求助

故障根因

KeyError: 'starling_config'报错与pyenv、虚拟环境解释器本身无关,核心原因是cron执行任务时默认工作目录为当前用户的家目录,脚本中使用相对路径config.read('config.conf')读取配置时,实际查找的是家目录下的config.conf而非脚本同目录的配置文件,读取失败后config对象不存在starling_config配置段,最终抛出键错误。
报错信息中出现miniforge路径下的configparser,是因为你之前未激活虚拟环境测试时调用到了miniforge版本的python,和你指定venv解释器执行的场景无关。

修复方案
  • 替换脚本中相对路径读取配置的逻辑,改用基于脚本绝对位置的路径解析,从根源避免工作目录变化导致的文件找不到问题。在原有导入代码中新增os模块导入,将配置读取部分修改为:
import os
import requests 
import configparser
import gspread
from oauth2client.service_account import ServiceAccountCredentials

# Config data for Starling
config = configparser.ConfigParser()
# 基于脚本自身所在目录拼接配置文件绝对路径
script_dir = os.path.dirname(os.path.abspath(__file__))
config.read(os.path.join(script_dir, 'config.conf'))
account_id = config['starling_config']['account_id']
  • 本地验证修复效果:不要切换到项目目录,直接在任意路径下执行你之前的测试命令,确认脚本可以正常运行:
    /Users/aaron/project/venv/bin/python /Users/aaron/project/extract_starling.py
  • 配置cron任务时显式指定工作目录,同时增加日志重定向方便后续排查运行问题,参考写法如下:
# 示例:每日凌晨2点执行脚本,运行日志追加到项目目录下的cron_run.log
0 2 * * * cd /Users/aaron/project && /Users/aaron/project/venv/bin/python /Users/aaron/project/extract_starling.py >> /Users/aaron/project/cron_run.log 2>&1
补充:pyenv版本显示异常说明

你观察到的pyenv global输出版本和python --version不一致、which python返回miniforge路径的问题,是因为miniforge安装时写入shell配置文件(.zshrc/.bashrc)的初始化代码优先级高于pyenv的初始化配置,导致shell加载时优先命中miniforge的python解释器。该问题不影响当前cron任务运行——因为你已经在cron命令中显式指定了虚拟环境python的完整绝对路径,执行时不会调用到系统全局的其他python版本,无特殊需求可以不用调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 06:21:19