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

使用pyproject.toml和Hatch时,可编辑安装无法读取数据文件夹怎么办?

解决Python包可编辑安装时找不到数据文件夹的问题

问题根源

正常安装pip install .时,Hatchling会按照[tool.hatch.build.force-include]的配置,把src/data目录打包到安装后的mypackage/data路径下,代码能正常读取文件。但**可编辑安装pip install -e .**是直接在Python环境中创建包目录的符号链接,不会执行构建时的文件复制操作,此时src/mypackage目录下并没有data文件夹,导致Path(__file__).parent / 'data/fruits.csv'找不到目标文件。

解决方案

方案一:调整目录结构(最直观)

把src/data直接移动到src/mypackage目录下,让数据文件成为包的一部分:

mypackage
├── README.md
├── examples
│   └── example.py
├── pyproject.toml
├── src
│   └── mypackage
│       ├── __init__.py
│       ├── adder.py
│       ├── fruit_reader.py
│       └── data
│           └── fruits.csv
└── tests
    ├── test_adder.py
    └── test_read_fruits.py

同时修改pyproject.toml,删除[tool.hatch.build.force-include]配置块——因为包目录下的文件会被Hatchling自动包含进安装包,无需额外配置。

这种方式下,不管是正常安装还是可编辑安装,Path(__file__).parent / 'data/fruits.csv'都能正确定位到文件。

方案二:使用官方推荐的importlib.resources读取数据(兼容性最佳)

Python 3.9+提供了importlib.resources模块,专门用于读取包内数据文件,兼容所有安装模式(正常/可编辑)。修改fruit_reader.py的代码:

import pandas as pd
from importlib.resources import files

def read_fruits():
    """
    Read fruit data from CSV file.
    """
    # 获取包内data/fruits.csv的路径
    path = files('mypackage').joinpath('data/fruits.csv')
    print(f'File path is\n{path}')

    df = pd.read_csv(path)
    print(f'Pandas dataframe is\n{df}')

注意保留pyproject.toml中的[tool.hatch.build.force-include]配置,确保正常安装时src/data被打包到mypackage/data路径下。

方案三:手动创建符号链接(临时 workaround)

如果不想修改代码或目录结构,可以在可编辑安装后,手动给src/mypackage创建data目录的符号链接:

  • Linux/macOS:
    cd src/mypackage
    ln -s ../../data data
    
  • Windows(管理员权限):
    cd src\mypackage
    mklink /D data ..\..\data
    

这种方式需要手动操作,适合临时测试场景,不推荐长期使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 17:45:32