Skip to main content

Baidu Netdisk client with CLI commands and a matching FastAPI Web UI.

Project description

pypang

pypang 是一个基于百度网盘开放平台接口的命令行客户端,同时提供本地 Web UI。它参考了 bypy 的使用习惯,默认兼容 bypy 的应用目录 /apps/bypy

特性

  • CLI 和 Web UI 两套使用方式
  • OAuth 授权,默认支持 redirect_uri=oob
  • 文件浏览、上传、下载、重命名、移动、删除、建目录
  • 多配置分别保存 token,可读取当前目录的 config.json
  • Bash 下支持命令、选项和网盘路径 Tab 补全(需手动开启)
  • CLI/Web 下载支持断点续传和校验
  • 单文件超过百度开放平台上限时自动按卷上传

快速开始

安装:

pip install pypang

查看当前配置:

pypang config show

输出里的 config.membership_tier 是本地兜底配置;授权后实际账号档位和生效并发看 runtime.effective_membership_tier

如果使用默认 bypy 配置,一般可以直接获取授权链接:

pypang auth url

浏览器打开授权链接后,从百度返回页复制 code,再执行:

pypang auth code <code>

列出网盘应用目录:

pypang ls /

启动 Web UI:

pypang serve

浏览器访问:

http://127.0.0.1:8080

安装

PyPI 安装

pip install pypang

源码安装

python -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -e .

配置与授权

默认配置

没有额外配置时,pypang 会使用内置的 bypy 应用配置:

  • 应用目录:/apps/bypy
  • 授权方式:oob
  • 默认按普通用户档位运行
  • 普通用户 CLI/Web 下载并发默认取 2
  • 普通用户单文件下载默认连接数为 1
  • 普通用户多卷上传默认并发取 2
  • VIP/SVIP 保持原有默认预设:CLI/Web 下载 8、单文件下载 4、多卷上传 4

运行状态默认保存在:

~/.pypang/state.json

临时文件默认保存在:

~/.pypang/tmp

修改配置

设置应用信息:

pypang config set --app-key your-app-key --secret-key your-secret-key --app-name myapp --app-root /apps/myapp --redirect-uri oob

只修改 Web UI 监听地址,不影响 token:

pypang config set --listen-host 0.0.0.0 --listen-port 8080

按会员档位调整上传分片和下载并发:

pypang config set --membership-tier vip --upload-chunk-mb 16 --cli-download-workers 4 --web-download-workers 4

普通用户上传分片固定为 4MB,单卷最大 4GB;VIP 最大 16MB/10GB;SVIP 最大 32MB/20GB。这些百度开放平台明确限制的值在保存配置时会校验,超出范围会直接报错,不会静默改成别的值。

调整单文件并发下载:

pypang config set --single-file-parallel-enabled --single-file-download-workers 4

调整网盘路径补全缓存时间,单位为秒,默认 60;设为 0 可关闭缓存:

pypang config set --completion-cache-seconds 120

config.json

如果当前目录存在 config.json,程序会优先读取它。多应用示例:

{
  "default": "myapp",
  "apps": [
    {
      "id": "bypy",
      "label": "bypy",
      "app_key": "q8WE4EpCsau1oS0MplgMKNBn",
      "secret_key": "PA4MhwB5RE7DacKtoP2i8ikCnNzAqYTD",
      "app_name": "bypy",
      "app_root": "/apps/bypy"
    },
    {
      "id": "myapp",
      "label": "我的应用",
      "app_key": "your-app-key",
      "secret_key": "your-secret-key",
      "app_name": "myapp",
      "app_root": "/apps/myapp"
    }
  ]
}

指定其他 config.json 路径:

export BAIDUPANWEB_LEGACY_CONFIG=/path/to/config.json

Bash 补全

pypang 支持 Bash 下的命令、选项和网盘路径 Tab 补全。远端目录候选会追加 /,可以继续进入下一层;远端目录列表默认缓存 60 秒,避免连续按 Tab 时反复请求 API。

启用用户级 Bash 补全:

pypang open completion

它会写入:

~/.pypang/completion.bash
~/.bashrc

新开的 Bash 会自动生效。当前 Bash 想立即生效,可执行:

source ~/.bashrc

关闭用户级 Bash 补全:

pypang close completion

当前 Bash 想立即取消,可执行:

complete -r pypang

临时启用,不修改 ~/.bashrc

source <(pypang completion bash)

注意:这是 Bash 补全,不会在 dashfish 等非 Bash shell 中生效。

CLI 常用命令

查看账号信息和容量:

pypang whoami
pypang quota

列目录和建目录:

pypang ls /
pypang mkdir /docs

上传文件:

pypang put ./local.txt /docs/remote.txt

上传目标也可以是目录:

pypang put ./local.txt /docs/

下载文件:

pypang get /docs/remote.txt ./downloads/

强制重新下载,不使用断点续传:

pypang get /docs/remote.txt ./downloads/ --no-resume

临时关闭单文件分段并发:

pypang get /docs/remote.txt ./downloads/ --no-single-file-parallel

重命名、移动、删除:

pypang rename /docs/remote.txt archive.txt
pypang mv /docs/archive.txt /history
pypang rm /history/archive.txt

命令别名:

  • ls = list
  • put = upload
  • get = download
  • mv = move
  • rm = delete
  • whoami = info

Web UI

本机启动:

pypang serve

指定地址:

pypang serve --host 127.0.0.1 --port 8080

无桌面服务器可对外监听:

pypang config set --listen-host 0.0.0.0 --listen-port 8080
pypang serve

然后通过公网 IP、内网穿透、反向代理或 SSH 端口转发访问:

http://服务器地址:8080

Web UI 授权流程:

  1. 打开 Web UI
  2. 点击授权按钮
  3. 在百度返回页复制 code
  4. 回到 Web UI 手动提交 code
  5. 授权完成后即可上传、下载和管理文件

上传与下载行为

下载

下载流程:

filemetas(dlink=1) -> dlink + access_token + User-Agent

CLI 下载和 Web UI 的“保存到服务器”会生成 .part 临时文件,并基于 Range 请求自动续传未完成部分。

恢复与校验规则:

  • 下载前会扫描目标目录,检查已有正式文件和 .part 文件
  • 本地文件大小已满足远端大小时,优先校验并复用
  • 校验失败会删除错误文件后重新下载
  • 远端 md5 合法时使用 MD5 校验,否则退回到大小校验
  • Web UI 传输卡片会显示 进行中 / 等待中 / 已完成

上传

上传流程:

locateupload -> precreate -> superfile2 -> create

单文件未超过平台上限时按普通流程上传。超过当前账号档位允许的单文件上限时,会在远端创建 原文件名.parts 目录并按卷上传。

多卷上传规则:

  • 多卷命名为 原文件名.001原文件名.002原文件名.003
  • 多卷默认并发上传跟随账号档位:普通用户 2 个卷,VIP/SVIP 4 个卷
  • 分卷预计算保持单线程顺序进行
  • 多卷目录会额外写入 extract.sh,下载后可用它合并分卷
  • 单卷大小默认跟随账号身份:普通用户 4GB、普通会员 10GB、超级会员 20GB
  • 可用 --upload-volume-gb 手动设置单卷大小;超过当前账号上限时会拒绝保存配置

设置单卷大小:

pypang config set --upload-volume-gb 8

项目结构

pypang/
  app.py
  cli.py
  client.py
  completion.py
  config.py
  storage.py
  static/
  templates/
app.list.json
README.md
requirements.txt

参考

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pypang-0.3.1.tar.gz (81.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pypang-0.3.1-py3-none-any.whl (78.9 kB view details)

Uploaded Python 3

File details

Details for the file pypang-0.3.1.tar.gz.

File metadata

  • Download URL: pypang-0.3.1.tar.gz
  • Upload date:
  • Size: 81.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pypang-0.3.1.tar.gz
Algorithm Hash digest
SHA256 f9c53e2f786a1e68f61b0f834d67c6fed3afbe80c3bfba2ef204ff8f3632dea1
MD5 0d78f3f75cc7a6b69debc382a4ce3b4a
BLAKE2b-256 bf0793a6573eb30aad2c0109204a1ff37a3a19dcd59a698ca2931294128a5b45

See more details on using hashes here.

File details

Details for the file pypang-0.3.1-py3-none-any.whl.

File metadata

  • Download URL: pypang-0.3.1-py3-none-any.whl
  • Upload date:
  • Size: 78.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pypang-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 3f9c65399c4c3be23aeed89b5846375e50823091f82da04773f890b1dcf56050
MD5 567065bfcec1baa25b693b657956c77f
BLAKE2b-256 5a29d212ba773c8fc268590d11f121914f94f0333b37f4c255dcd129fe1ed3fe

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page