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

Python包内置.ods文件读取时报KeyError: '.ods'如何解决?

问题解决方法

问题根因

  • 打包配置缺失:默认setuptools只会打包.py后缀的文件,你没有配置将.ods文件纳入打包范围,虚拟环境安装完成后该文件不会出现在site-packages的包目录下,程序找不到对应文件触发扩展名识别错误
  • 路径硬编码错误:你写的相对路径librebook.ods是相对于脚本运行时的工作目录,而非包的安装目录,即便文件存在,运行时工作目录不对也会找不到文件

修复步骤

1. 配置打包规则包含ods文件

你可以选择以下任意一种方式配置:

方式一:通过setup.py的package_data参数配置

修改根目录的setup.py,添加包数据配置:

from setuptools import setup, find_packages

setup(
    name="mypackage",
    version="0.1",
    packages=find_packages(where="src"),
    package_dir={"": "src"},
    # 新增以下配置,指定mypackage下所有ods文件需要打包
    package_data={
        "mypackage": ["*.ods"]
    }
)

方式二:通过MANIFEST.in配置

在项目根目录新建MANIFEST.in文件,写入以下内容:

include src/mypackage/*.ods

然后在setup.py中添加include_package_data=True参数即可。

2. 动态获取包内文件路径,避免硬编码相对路径

使用Python标准库importlib.resources动态获取包内文件的绝对路径,适配不同安装环境:

from pandas_ods_reader import read_ods
from importlib.resources import files
import mypackage

# 动态获取包内ods文件的绝对路径
ods_file_path = files(mypackage).joinpath("librebook.ods")
# 转为字符串路径传入read_ods
df = read_ods(str(ods_file_path))

如果你使用的是Python3.8及更早版本,可安装第三方兼容包importlib_resources,导入语句替换为from importlib_resources import files即可。

排查验证点

  • 确认虚拟环境中已经安装了pandas_ods_reader依赖
  • 安装包后可进入虚拟环境的site-packages/mypackage目录,确认librebook.ods文件存在

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 05:36:01