Skip to content

v2.12.4 MediaChain 刮削报错:NamedTemporaryFile() got an unexpected keyword argument delete_on_close(Python 版本不兼容) #5819

@wuxinwulian

Description

@wuxinwulian

环境信息

  • MoviePilot 版本: v2.12.4 (latest)
  • Docker 镜像: jxxghp/moviepilot-v2:latest
  • Docker 容器内 Python 版本: PYTHON_VERSION=3.10
  • 部署方式: Docker (群晖 NAS)
  • 代理配置: 通过 PROXY_HOST 环境变量设置,网络连通正常

问题描述

更新到 v2.12.4 后,MoviePilot 在刮削媒体文件时频繁报错,无法完成封面和 .nfo 信息文件的写入。

错误日志

MediaChain.scrape_metadata_event: NamedTemporaryFile() got an unexpected keyword argument delete_on_close

通知中心报错

MediaChain.scrape_metadata_event: NamedTemporaryFile() got an unexpected keyword argument delete_on_close

问题分析

NamedTemporaryFiledelete_on_close 参数是 Python 3.12 才引入的特性,但 MoviePilot 的 Docker 镜像目前底层使用的是 Python 3.10

推测是近期 MediaChain 或相关依赖库的更新中,使用了 Python 3.12+ 的语法,但 Docker 镜像的基础 Python 版本尚未升级,导致兼容性问题。

复现步骤

  1. 使用 jxxghp/moviepilot-v2:latest 镜像启动容器
  2. 添加任意需要刮削的媒体文件(电影或剧集)
  3. 触发元数据刮削(自动或手动刷新元数据)
  4. 查看实时日志,出现 NamedTemporaryFile() got an unexpected keyword argument delete_on_close 错误
  5. 刮削失败,无法写入封面和 .nfo 文件

预期行为

刮削应正常完成,封面和信息文件正常写入。

建议修复方案

  1. 升级 Docker 镜像的基础 Python 版本至 3.12+
  2. 或在 MediaChain 代码中对 delete_on_close 参数做版本兼容判断

补充说明

  • 代理连接正常(PROXY_HOST 已配置且生效)
  • 网络请求可以正常到达各数据源站点
  • 错误是纯 Python 版本兼容性导致,与网络/代理/站点认证无关
  • 回退到 v2.12.3 或 stable 标签可以临时规避此问题

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions