# 百度网盘官方客户端 200MB 还不好用,我写了一个 50MB 的替代品

我百度网盘里有大概 2TB 的文件,目录套目录,时间长了整理起来很头疼。官方客户端这两年越来越重,装完一看 200 多 MB,开个窗口内存就上 300MB,关键是功能上连 Windows 资源管理器十年前的水平都达不到。

最让我受不了的几点:

- 不能多开标签页,想同时看两个文件夹得开两个窗口
- 没有分屏,整理文件时来回切目录
- 拖拽移动文件不行,右键复制也不行,只能靠官方那几个按钮
- 没目录树,进深层文件夹要一层层点
- 搜索只能搜名字,不能按文件类型过滤

后来实在忍不下去了,拿 PySide6 自己写了一个。

网盘链接:https://pan.baidu.com/s/1cFB90jOPGHVKrogxfXr31w?pwd=e7p5 提取码: e7p5

项目地址:https://github.com/onexf426/baidu_pan_Manager

有需求可以直接文章下评论,看到会添加。

## 跟官方客户端比到底差多少

| 功能 | 官方客户端 | 这个 |
|------|-----------|------|
| 安装包大小 | 200MB+ | ~50MB |
| 运行时内存 | 300MB+ | ~60MB |
| 多标签 | 没有 | 有 |
| 左右分屏 | 没有 | 有 |
| 拖拽移动/复制 | 没有 | 有 |
| 目录树 | 没有 | 有 |
| 按类型筛选 | 没有 | 有 |
| 右键菜单 | 就几个选项 | 完整菜单 |
| 断网能不能用 | 依赖 Electron 网络 | 原生 Qt,离线可用 |

体积差 4 倍,内存差 5 倍,功能还更多。Electron 做桌面应用就是这样,写起来快但跑起来重。

## 具体有哪些功能

### 多标签

跟浏览器一样,上面一排标签页,每个标签独立导航。点 + 号新建,关掉就 Ctrl+W。不同目录同时打开不用切来切去。

### 分屏

工具栏上点一下切换成双栏模式,左右两个独立的文件面板,各自有目录树和文件列表。左边选中文件拖到右边的目录树或文件区域,弹窗问你是移动还是复制,选完就执行。

这个功能在整理文件的时候最实用,比如左边打开"待整理"文件夹,右边打开分类好的目录,拖过去就完事。

### 拖拽操作

拖拽的支持范围:

- 文件拖到左侧目录树的某个节点 → 移动/复制到那个目录
- 文件拖到另一侧文件列表 → 移动/复制到另一侧的当前目录
- 支持多选拖拽(Ctrl+Click 多选后再拖)

弹窗确认选移动还是复制,不会误操作。百度网盘 API 对移动和复制是分开的接口,所以这里要区分。

### 目录树

左侧目录树是懒加载的,展开哪个节点才去请求哪个目录的子目录,不会一次性把整个网盘目录结构拉下来。网盘根目录下如果有几十个文件夹,全加载要发几十次请求,懒加载只在需要时才发。

### 搜索和筛选

搜索框输入关键词直接调百度网盘的搜索 API。加了分类筛选下拉框:文档、图片、视频、音乐、压缩包,选了之后会在搜索请求里带上文件类型参数。

输入做了 300ms 的防抖,不然每敲一个字母就发一次请求,一是浪费 API 配额,二是返回顺序会乱。

### 批量操作

Ctrl+Click 多选,Shift+Click 范围选择,跟资源管理器一样。工具栏上有批量移动、复制、删除按钮。操作过程中弹进度窗口,显示进度条、成功/失败计数,失败的文件会列出具体原因。

### 文件详情

底部有一个详情面板,选中文件后显示文件名、路径、大小、MD5、修改时间。MD5 这个字段百度网盘 API 是返回的,用来校验文件比较方便。

### UI

整体按 macOS 那种风格做的,SF Pro 的配色,圆角控件,细滚动条,Toast 通知有淡入淡出动画。没有花里胡哨的东西,就是干净够用。

## 代码怎么组织的

```
技术栈:Python 3.10+ / PySide6 / requests
打包工具:PyInstaller

core/
├── api.py          百度网盘 Open API 封装
├── auth.py         OAuth2 授权流程
├── config.py       配置读写(JSON 存本地)
└── token_manager.py Token 管理和自动刷新

ui/
├── main_window.py  主窗口,标签系统、分屏、工具栏、搜索、拖拽
├── file_pane.py    文件面板,包含导航栏+目录树+文件表格,分屏时左右各一个实例
├── file_table.py   文件表格,排序、拖拽源、右键菜单、行内重命名、滚动分页
├── dir_tree.py     目录树,懒加载、拖拽目标
├── styles.py       全局样式表
└── toast.py        Toast 通知

utils/
├── file_utils.py   文件类型判断、大小格式化
└── debounce.py     搜索防抖
```

几个设计上比较关键的决策:

**为什么不用 Electron 用 PySide6。** 体积 50MB vs 200MB,内存 60MB vs 300MB,原生渲染不卡。而且 Electron 打包后 node_modules 里一堆东西,PySide6 打包完就是一整个 exe。在很多内网机器上,Python 环境是现成的,Electron 反而要额外装一堆依赖。

**Token 怎么管。** Token 过期前 5 分钟自动刷新,防止请求发出去才知道过期了。遇到 -10/-11 错误码(Token 无效)也会自动重刷 Token 再重试。API 限流(31034)做了指数退避,不会一直撞墙。

**文件列表怎么加载。** 每次请求 100 条,滚动到底部自动加载下一页。不一次性全拉是因为有些文件夹可能有几千个文件,一次加载太多 API 返回慢,UI 也会卡。

## 怎么用

### 直接跑 exe

Releases 里下载 exe,不需要装 Python,不需要配环境,双击运行。

### 从源码跑

```bash
git clone https://github.com/onexf426/baidu_pan_Manager.git
cd baidu_pan_Manager
pip install -r requirements.txt
python main.py
```

### 第一次用的授权步骤

1. 去百度网盘开放平台 https://pan.baidu.com/union/ 创建应用,拿到 AppKey 和 SecretKey
2. 打开软件,输入 AppKey 和 SecretKey
3. 点"打开授权页面",浏览器跳转到百度授权页
4. 授权完成后复制授权码,粘贴回软件
5. 点"完成授权"

后面 Token 会自动保存和刷新,不需要重复授权。

## 打包

```bash
pyinstaller build.spec
```

生成的 exe 在 dist 目录下,大概 50MB 左右,带图标,没有控制台窗口。

体积能压到 50MB 是因为 build.spec 里排除了大量不用的 Qt 模块(QtWebEngine、QtMultimedia 这些),PySide6 默认全量打包是 200MB+。

## 配置文件

```
Windows: %APPDATA%/baidu-pan-manager/config.json
macOS:   ~/Library/Application Support/baidu-pan-manager/config.json
Linux:   ~/.config/baidu-pan-manager/config.json
```

存的就几样东西:Token、窗口位置大小、上次打开的目录、搜索历史。

## 后面还想做的

- 上传/下载(目前只做了文件管理,没做传输)
- 批量重命名
- 图片和文档预览
- 对接阿里云盘、夸克网盘

项目地址:https://github.com/onexf426/baidu_pan_Manager

有问题直接提 Issue,觉得有用的话 Star 一下,Star 是开源项目唯一不用花钱的支持方式。

#百度网盘 #PySide6 #Python #桌面应用 #文件管理器 #Qt #开源
 

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐