使用bypy实现百度云盘文件上传与下载

前言

我的需求是在一家 pt 站上传种子和做种,但是我的初始文件是在百度网盘中,我需要将文件传到我用来刷 pt 的 vps 中,才能进行后续操作。

对于有 GUI (图形用户界面) 的 linux 系统,想要使用百度网盘直接下载对应的客户端即可进行操作。
但是对于云服务器来说,下载客户端不太现实,好在 github 的开源项目 bypy 给出了使用命令行操作百度云盘的方法。


安装与授权

安装和授权 bypy 参考 github 官方文档(上面贴的有链接)即可,也就是使用pip install bypy 进行安装,安装完成后第一次运行时需要授权,只需跑任何一个命令(比如 bypy info)然后跟着说明(登陆等)来授权即可。授权只需一次,一旦成功,以后不会再出现授权提示。

1
2
pipx install bypy
bypy info

image.png|300

image.png|300
接着点击链接,登录百度云盘后,获取到授权码复制到界面中,再点击 Enter 即可。
image.png|300
提示是这样就表示授权成功了。


pipx

和官方文档描述的不同,对于 bypy 的安装,我使用的是 pipx 来替代 pip,pipx 是一个用于隔离安装和运行 Python 命令行工具的工具。它会为每个安装的工具创建独立的虚拟环境,确保不同工具之间的依赖不会冲突。

安装

1
2
3
4
5
sudo apt update
sudo apt install pipx

#配置路径:
pipx ensurepath

image.png|300

常用指令

指令 作用
pipx install <package_name> 安装一个 Python 命令行工具,支持隔离的虚拟环境。
pipx run <package_name> [arguments] 临时运行一个工具,而不进行全局安装。
pipx list 列出通过 pipx 安装的所有工具及其依赖。
pipx uninstall <package_name> 删除指定工具及其虚拟环境。
pipx reinstall-all 重新安装所有工具(通常用于 Python 版本升级后)。
pipx upgrade <package_name> 升级指定工具到最新版本。
pipx upgrade-all 升级所有通过 pipx 安装的工具到最新版本。
pipx ensurepath 检查并确保 pipx 安装的工具路径添加到 $PATH 环境变量中。
pipx environment <package_name> 查看指定工具的虚拟环境详细信息。
pipx runpip <package_name> <command> 在工具的虚拟环境中直接运行 pip 命令。
pipx uninstall-all 卸载所有通过 pipx 安装的工具及其虚拟环境(慎用)。
pipx --version 查看 pipx 的版本号。

和 pip 区别

特性 pip pipx
用途 用于安装 Python 库或命令行应用程序,可以安装带 entry points 的库 专门用于安装和管理 Python 命令行工具,每个工具都在隔离的虚拟环境中运行
虚拟环境 不自动创建虚拟环境,需要手动使用 venvvirtualenv 创建 自动为每个安装的工具创建隔离的虚拟环境,避免依赖冲突
全局命令 安装的包通常是库,需要在 Python 代码中导入使用 安装的命令行工具可以全局调用,无需激活虚拟环境
依赖管理 依赖可能会影响全局 Python 环境或其他项目 依赖管理在隔离环境中进行,不会影响系统或其他项目
安装命令 使用 pip install package_name 命令安装包 使用 pipx install package_name 命令安装命令行工具
升级和卸载 需要手动管理包的升级和卸载 提供简单的命令来升级所有工具或卸载特定工具
与 PyPI 集成 直接从 PyPI 安装包 也从 PyPI 安装包,但专注于命令行工具
用户权限 可能需要管理员权限来安装全局包 通常不需要管理员权限,可以作为普通用户操作
临时执行 不支持临时执行环境 支持通过 pipx run 在临时环境中运行应用程序,无需安装
多版本管理 需要手动管理不同版本的包 自动处理不同版本的工具和它们的依赖,无需手动干预
跨平台支持 支持多个平台,但可能需要不同的包管理器 跨平台支持,包括 Linux、macOS 和 Windows


常用指令

列出目录内容

bypy list [远程目录]

默认显示百度网盘 /apps(就是“我的应用数据”)/bypy 目录下的所有文件。
例如: bypy list / 列出根目录内容,不加这个/,也是默认根目录
image.png|300
image.png|300
image.png|300
bypy会在你的百度网盘里的这个目录里,我的应用数据/bypy/下面,所以如果你要把网盘的内容通过bypy放到服务器,需要现在网盘里把数据先移到bypy的目录下。同理,这里上传下载对应的目录都是我的应用数据/bypy/这里路径下。

上传文件或目录

bypy upload <本地路径> [远程目录]

这是从云服务器上传文件到百度网盘。
测试:

1
bypy upload /root/data/bypy/1.txt /测试

image.png|300

下载文件或目录

bypy downfile

  • 功能:下载远程的单个文件
  • 用法bypy downfile <remotefile> [localpath]
    • remotefile:百度云上的目标文件路径(从应用根目录开始)。
    • localpath:本地存储路径:
      • 如果以 /\ 结尾,表示下载到指定的本地目录。
      • 如果是已存在的本地目录,也表示目标是该目录。
      • 如果未指定,则默认存储在当前目录 .
      • 如果是一个新的路径(非目录),则表示存储为指定的文件名。
  • 特点
    • 专用于下载单个文件。
    • 提供了流式处理的能力,可以通过 mkfifo 管道结合 omxplayer 等工具直接播放流媒体。

bypy downdir

  • 功能:递归下载远程的目录
  • 用法bypy downdir [remotedir] [localdir]
    • remotedir:百度云上的目标目录路径(从应用根目录开始)。如果未指定,则默认是百度云的根目录。
    • localdir:本地目标目录。如果未指定,默认为当前目录。
  • 特点
    • 专门用于下载整个目录,包括目录中的所有子目录和文件。
    • 只能下载目录,不支持单个文件的操作。

bypy download

  • 功能:根据远程路径(文件或目录)智能下载文件或目录
  • 用法bypy download [remotepath] [localpath]
    • remotepath:百度云上的目标路径,可以是文件也可以是目录。如果未指定,默认是百度云的根目录。
    • localpath:本地目标路径。如果未指定,默认是当前目录。
  • 特点
    • 既支持文件下载,也支持目录递归下载。
    • 根据目标类型自动决定下载逻辑(文件/目录)。


全部指令

显示使用帮助和所有命令(英文):bypy

命令 描述
help <command> 显示指定命令的帮助信息
cdl_add <source_url> [save_path] [timeout] 添加离线下载任务
cdl_addmon <source_url> [save_path] [timeout] 添加并监控离线下载任务
cdl_cancel <task_id> 取消离线下载任务
cdl_list 列出所有离线下载任务
cdl_query <task_ids> 查询离线下载任务
cleancache 清除无效的哈希缓存
combine <remotefile> [localfile] [md5s] 合并文件切片
compare [remotedir] [localdir] 比较远程目录和本地目录
copy/cp <from> <to> 远程复制文件/目录
delete/remove/rm <remotepath> 删除远程文件/目录
downdir [remotedir] [localdir] 递归下载远程目录
downfile <remotefile> [localpath] 下载远程文件
download [remotepath] [localpath] 智能下载文件或目录
dumpcache 显示文件哈希缓存
list/ls [remotepath] [format] [sort] [order] 列出远程目录内容
listrecycle [start] [limit] 列出回收站内容
meta <remotepath> [format] 获取远程文件/目录信息
mkdir <remotedir> 创建远程目录
move/mv/rename/ren <from> <to> 远程移动文件/目录
quota/info 显示云存储配额
refreshtoken 刷新访问 token
restore <remotepath> 从回收站恢复文件
search <keyword> [remotepath] [recursive] 搜索远程文件
stream <remotefile> <localpipe> [format] [chunk] 流式处理远程文件(如视频/音频)
syncdown [remotedir] [localdir] [deletelocal] 从远程同步到本地目录
syncup [localdir] [remotedir] [deleteremote] 从本地同步到远程目录
upload [localpath] [remotepath] [ondup] 上传文件或目录
whoami 显示用户信息


参考

  1. houtianze/bypy: Python client for Baidu Yun (Personal Cloud Storage) 百度云/百度网盘Python客户端
  2. https://blog.csdn.net/crazyjinks/article/details/140290187
  3. bypy:使用Linux命令行上传及下载百度云盘文件(远程服务器大文件传输必备)-CSDN博客