如何以Pythonic方式访问Python包外部的data目录(可编辑安装场景)
解决顶层
data目录的Pythonic访问方案 核心思路
你用的是可编辑安装,且顶层data不属于my_package内部目录(包内已有独立data目录),所以package_data(仅针对包内资源)和data_files(会复制文件到系统路径,可编辑模式下本地修改不生效)都不适用。正确方案是把顶层data声明为命名空间包,这样就能用importlib.resources安全访问。
步骤实现
给顶层
data目录添加__init__.py
在项目根目录的data/下创建空的__init__.py,让Python把它识别为可导入的包,目录结构变为:/ ├── data/ │ ├── __init__.py # 新增空文件 │ ├── more_data/ │ └── foo.txt ├── my_package/ │ ├── __init__.py │ └── stuff/ │ └── __init__.py ├── README.md ├── setup.cfg ├── setup.py修改
setup.cfg配置
在[options]段添加自动包发现和资源包含配置,确保可编辑安装时资源链接有效:[options] packages = find: include_package_data = True无需额外配置
[options.package_data],include_package_data会自动包含所有非源码文件。代码中访问资源
现在可以直接用你期望的方式访问:import importlib.resources import data dir_data = importlib.resources.files(data) csv_files = dir_data.glob('*.csv') # 读取foo.txt示例 with importlib.resources.files(data).joinpath('foo.txt').open('r') as f: content = f.read()
关键说明
- 命名空间包完美适配可编辑安装,本地修改
data目录下的文件后,代码能直接读取最新内容,无需重新安装。 - 完全规避了
__file__硬编码路径的问题,符合Python官方推荐的资源访问规范。
内容的提问来源于stack exchange,提问作者Androvich
相关产品推荐
相关产品推荐

