使用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 命令行工具,每个工具都在隔离的虚拟环境中运行
虚拟环境 不自动创建虚拟环境,需要手动使用 venv 或 virtualenv 创建 自动为每个安装的工具创建隔离的虚拟环境,避免依赖冲突
全局命令 安装的包通常是库,需要在 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博客