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

如何以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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 07:02:34