fsspec:给 Python 文件系统写个统一接口

fsspec 在 GitHub 上拿到了 1,320 个 Star。

这个项目要解决一个具体问题:Python 里操作文件系统,不同后端接口各异。本地文件、S3、GCS、SSH……每种都有一套自己的调用方式。fsspec 把这些统一到一个规范下,写一次代码,换后端只需改配置。

正文顶部截图

1、这项目干什么的

fsspec 全称 filesystem_spec,是一套 Python 文件系统接口规范。

它的核心思路很简单:定义一套标准方法,比如 open、ls、cp、rm,然后让各个后端去实现这套方法。应用层只跟 fsspec 打交道,不用关心底层是本地磁盘还是云存储。

目前已经有不少成熟的后端实现,比如 s3fs(AWS S3)、gcsfs(Google Cloud Storage)。这些项目跟 fsspec 是姐妹关系,接口对齐,行为一致。

2、为什么要用它

做过数据工程的人都遇到过这种场景:本地开发时读本地文件,上线后读 S3,测试环境又要切到 GCS。每种存储的 SDK 写法都不一样,代码里到处是 if/else。

fsspec 把这个逻辑抽走了。你只需指定一个 protocol 前缀,比如 s3://、gcs://、file://,剩下的读写逻辑完全一样。

这还带来一个额外好处:如果规范设计合理,那么 key-value 存储、FUSE 挂载这类功能就能对所有后端生效,不需要逐个适配。

3、安装方式

基础安装:

pip install fsspec

特定后端需要额外依赖,例如 SSH 支持:

pip install fsspec[ssh]

如果懒得逐个选,直接装全套:

pip install fsspec[full]

conda 用户也可以用:

conda install -c conda-forge fsspec

README区域截图

4、开发和测试

项目用 GitHub Actions 跑 CI。本地开发建议用 conda 或 mamba 建环境:

mamba create -n fsspec -c conda-forge python=3.10 -y
conda activate fsspec
pip install -e ".[dev,doc,test]"

跑测试用 pytest:

pytest fsspec

完整测试需要 docker、docker-compose 和 fuse,如果只是改某个后端实现,通常不必全跑。项目还要求贡献者确认修改不会破坏下游项目,CI 里会跑 dask、pandas、zarr 的兼容性测试。

代码格式化用 Black,也可以通过 pre-commit 钩子自动执行。

5、适合哪些人用

  • 需要统一读写本地和云存储的 Python 开发者
  • 在维护多后端数据管道的数据工程师
  • 使用 Dask、Pandas 等库,希望底层存储无缝切换的用户

项目文档托管在 ReadTheDocs,搜索 filesystem-spec 就能找到。开发工作由 Anaconda 部分赞助支持。

存储无缝切换的用户

项目文档托管在 ReadTheDocs,搜索 filesystem-spec 就能找到。开发工作由 Anaconda 部分赞助支持。

更多推荐