onedrived-dev, 在Python3中,一个用于Linux的微软 OneDrive

分享于 

19分钟阅读

GitHub

  繁體 雙語
A Microsoft OneDrive client for Linux, written in Python3.
  • 源代码名称:onedrived-dev
  • 源代码网址:http://www.github.com/xybu/onedrived-dev
  • onedrived-dev源代码文档
  • onedrived-dev源代码下载
  • Git URL:
    git://www.github.com/xybu/onedrived-dev.git
    Git Clone代码到本地:
    git clone http://www.github.com/xybu/onedrived-dev
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/xybu/onedrived-dev
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    onedrived开发

    GitHub versionBuild StatusDependency StatusLicensecodecovCoverage StatusCode ClimateCodacy Badge

    简介

    onedrived 是面向Linux的微软OneDrive插件的客户端程序。 使用它可以同步本地目录和远程OneDrive存储库( 例如一个或者多个OneDrive个人帐户) ( 不支持业务帐户的OneDrive。 查看 #1).

    程序用Python3编写,使用官方 OneDrive python SDK 与OneDrive服务器通信,并使用 Keyring安全存储帐户凭据,并使用Linux监视文件系统更改。

    开发 。小心使用。

    安装

    要安装 onedrived,安装所有必需的包,确保卸载 onedrived的旧版本,最后安装 onedrived。 这些步骤中的每一个都将在。

    下面的指南将假定安装了Python3解释器的环境。 若要检查Python3解释器的版本,请运行命令

    $ python3 --version
    Python 3.5.2

    如果没有找到 python3 命令,或者它的版本低于 3.3,请安装最新的python3 包。 例如在Ubuntu上

    $ sudo apt-get install python3

    强烈建议你使用最新的PIP管理 python 包依赖项。 若要从源获取最新的pip,请运行命令

    # Download pip installation script from official site using wget.$ wget -O- https://bootstrap.pypa.io/get-pip.py | sudo python3# Upgrade the components (e.g., setuptools) to latest version.$ sudo pip3 install -U pip setuptools

    要求

    低级工具和 api ( 如 inotifykeyring )的使用引入了低级依赖,需要手动安装。 在Ubuntu上,需要以下软件包:

    • gcc
    • python3-dev
    • libssl-dev
    • inotify-tools
    • python3-dbus ( 或者可能是 libdbus-glib-1-dev )

    在其他发行版的Fedora上,这些软件包的名称可能会有所不同。

    请注意,为OneDrive凭据( 泄露可能导致你的OneDrive数据完全妥协) 提供安全本地存储的keyring 可以能需要更多的包( 例如d 总线或者FreeDesktop密钥服务),这取决于你的Linux发行。 请参考它的安装指令,以获得更详细的信息。 如果环境需要 keyring.alt 包,请确保使用最新版本( sudo pip3 install -U keyrings.alt )。

    要在Ubuntu上安装这些依赖项,请使用 apt-get 命令:

    # Install gcc and other C-level pre-requisites.$ sudo apt-get install build-essential python3-dev libssl-dev inotify-tools python3-dbus

    python级预先安装必需在 requirements.txt 中,安装 onedrived 时将自动安装。

    卸载旧的onedrived

    如果系统中有旧版本 onedrived ( 过去也叫 onedrive-d ),请在继续之前将它的卸载。 这些软件包可以用 pip 轻松删除。

    # Remove Python packages of older onedrive-d.$ sudo pip3 uninstall onedrive_d onedrived# Remove useless config files.$ rm -rf ~/.onedrive ~/.onedrived

    安装 onedrived

    你可以通过 pip3 安装 onedrived,也可以手动安装代码并手动安装。 要了解是否安装了最新版本,请注意,你可能需要定期检查这个存储库,并运行包含的测试来查看是否真的可以在你的。

    从PyPI安装到 pip

    windows上还没有 onedrived

    从源代码安装到 pip ( 推荐)

    要使用 pip3 从源代码安装最新的onedrived,请运行以下命令。

    注释:

    • git 必须安装在系统上。
    • 要安装onedrived系统宽( 也就是说,onedrived程序对操作系统中的所有用户都可用),请从命令中删除参数 --user )。
    $ pip3 install --user git+https://github.com/xybu/onedrived-dev.git
    手动安装

    首先从GitHub知识库中提取代码:

    $ git clone https://github.com/xybu/onedrived-dev.git
    $ cd onedrived-dev

    你可能希望在使用以下命令之一安装之前运行所包含的测试:

    # Use the built-in test driver of Python.$ python3./setup.py test# Or use py.test if you have it installed.$ python3 -m pytest

    然后使用以下命令之一安装 onedrived:

    # Use pip to install onedrived.$ pip3 install -e .# Or use the built-in setuptools package from Python.$ python3./setup.py install --user

    用法

    onedrived 公开了两个命令 -- onedrivedonedrived-pref。 前者是"同步器",后者是"配置器"。 如果你想直接在代码库中运行而不安装包,请在以下示例命令中使用 python3 -m onedrived.od_main 替换 onedrived,并将 onedrived-pref 替换为 python3 -m onedrived.od_pref

    配置 onedrived

    在首次运行 onedrived 之前,或者需要更改配置时,需要使用 onedrived-pref 命令。 下面的小节介绍了基本的使用场景。 有关更多使用场景,请参考"更多用法"部分。

    若要读取 onedrived-pref的完整用法,请使用参数 --help:

    $ onedrived-pref --help
    Usage: od_pref.py [OPTIONS] COMMAND [ARGS]...
    Options:
     --version Show the version and exit.
     -h, --help Show this message and exit.
    Commands:
     account Add new OneDrive account to onedrived, list all existing ones, or
     remove some.
     config Modify config (e.g., proxies, intervals) for current user.
     drive List all remote OneDrive repositories (Drives) of linked accounts,
     add new Drives to sync, edit configurations of existing Drives, or
     remove a Drive from local list.
    授权帐户

    配置帐户相关的操作可以通过命令 onedrived-pref account 列出

    $ onedrived-pref account --help
    Usage: od_pref.py account [OPTIONS] COMMAND [ARGS]...
    Options:
     -h, --help Show this message and exit.
    Commands:
     add Add a new OneDrive account to onedrived.
     del De-authorize and delete an existing account from onedrived.
     list List all linked accounts.

    要向 onedrived 中添加OneDrive帐户,需要命令 onedrived-pref account add。 这里命令的帮助消息如下所示:

    $ onedrived-pref account add --help
    Usage: od_pref.py account add [OPTIONS]
    Options:
     -u, --get-auth-url If set, print the authentication URL and exit.
     -c, --code TEXT Skip interactions and try authenticating with the code
     directly.
     -b, --for-business If set, add an OneDrive for Business account.
     -h, --help Show this message and exit.

    更具体地说,CLI提供两种模式添加帐户--交互模式,在其中一步一步,CLI引导你一步一步and命令模式,在其中提供来自 命令行 参数的信息。

    交互模式

    在交互模式下,该程序将为你提供一个访问。 使用浏览器(。比如,Chrome,Firefox ) 打开这里 URL,使用你的Microsoft帐户登录并授权 onedrived 访问你的OneDrive数据。 网页最终将登陆到一个以" https://login.live.com/oauth20_desktop.srf"开头的空白页面。 将这里 URL (。a.k.a,回调 URL ) 粘贴到程序中。

    注意,onedrived 需要你的基本帐户信息( 比如,电子邮件地址) 来区分不同帐户的( 否则OneDrive会返回"令牌"你无法说出他们代表哪个账户)。

    $ onedrived-pref account add
    NOTE: To better manage your OneDrive accounts, onedrived needs permission to access your account info (e.g., email
    address to distinguish different accounts) and read/write your OneDrive files.
    Paste this URL into your browser to sign in and authorize onedrived:
    https://login.live.com/oauth20_authorize.srf?response_type=code&scope=wl.signin+wl.emails+wl.offline_access+
    onedrive.readwrite&client_id=000000004010C916&redirect_uri=https%3A%2F%2Flogin.live.com%2Foauth20_desktop.srf
    The authentication web page will finish with a blank page whose URL starts with"https://login.live.com/oauth20_desktop.srf". Paste this URL here.
    Paste URL here: https://login.live.com/oauth20_desktop.srf?code=<some_code_here>&lc=1033
    Successfully authorized onedrived.
    Successfully added account for Xiangyu Bu (xybu92@live.com, <account_id_token>)!All OneDrive accounts associated with user "xb":
     # Account ID Owner Name Email Address--- ------------------ ------------ ---------------
     0 <account_id_token> Xiangyu Bu xybu92@live.com
    命令模式

    使用以下命令获取URL中的签名,而不是在URL中提供签名,然后提示回调 URL:

    $ onedrived-pref account add --get-auth-url
    NOTE: To better manage your OneDrive accounts, onedrived needs permission to access your account info (e.g., email
    address to distinguish different accounts) and read/write your OneDrive files.
    Paste this URL into your browser to sign in and authorize onedrived:
    https://login.live.com/oauth20_authorize.srf?response_type=code&client_id=000000004010C916&redirect_uri=https%3A%2F%2F
    login.live.com%2Foauth20_desktop.srf&scope=wl.signin+wl.emails+wl.offline_access+onedrive.readwrite

    访问URL并执行与交互模式相同的步骤,直到得到空白页面。 复制URL并从URL复制 code 参数。 例如在URL中 https://login.live.com/oauth20_desktop.srf?code=<some_code_here>&lc=1033 ,找到 ?code=<some_code_here>& 部分,代码是 <some_code_here>

    使用命令 onedrived-pref account add --code <some_code_here><some_code_here> 是代码,用于添加你的帐户。

    onedrived 添加驱动器

    授权 onedrived 访问OneDrive数据后,现在可以添加驱动器。 每个OneDrive帐户都有一个或者多个驱动器,onedrived 允许你选择要同步的驱动器。 授权 onedrived的步骤类似,CLI提供交互模式和命令模式。

    交互模式
    $ onedrived-pref drive setReading drives information from OneDrive server...
    All available Drives of authorized accounts:
     # Account Email Drive ID Type Quota Status--- --------------- ---------------- -------- --------------------------- --------
     0 <some_email><some_drive_id> personal 5.3 GB Used/33.0 GB Total active
    Please enter row number of the Drive to add or modify (CTRL+C to abort): 0
    Going to add/edit Drive "<some_drive_id>" of account "<some_email>"...
    Enter the directory path to sync with this Drive [/home/xb/OneDrive]: 
    Syncing with directory "/home/xb/OneDrive"? [y/N]: y
    Enter the path to ignore file for this Drive [/home/xb/.config/onedrived/ignore_v2.txt]: 
    Successfully configured Drive <some_drive_id> of account <some_email> (<some_user_id>):
     Local directory:/home/xb/OneDrive
     Ignore file path:/home/xb/.config/onedrived/ignore_v2.txt

    如果授权了多个帐户,则所有授权帐户的驱动器都将出现在表中。

    命令模式

    请使用命令从帮助消息中找到可用的命令行参数 onedrived-pref drive set --help

    设置 webhook

    Webhook解释

    现在,请参阅问题 #19. 更详细的详细信息。

    使用 ngrok -based-webhook

    下载并安装 ngrok插件。

    默认情况下,onedrived 将从 PATH 查找 ngrok 二进制。 若要手动指定二进制路径,请在运行 onedrived 时设置环境变量 ngrok。 比如, NGROK=~/utils/ngrok onedrived start --debug

    若要对 ngrok 使用自定义配置文件,请将环境变量 NGROK_CONFIG_FILE 设置为所需配置文件的路径。 注意 onedrived 将自动创建一个HTTPS隧道,并且不需要指定隧道。 使用自定义 ngrok 配置文件的目的应该是调整资源使用情况,或者将 ngrok 流程链接到你付费的ngrok 帐户。 onedrived 附带的默认 ngrok 配置文件关闭 ngrok的终端输出,并禁用检查数据库。

    使用直接连接

    。不适用于大多数最终用户机器。

    在调试模式下运行 onedrived

    使用参数 --debug,以便 onedrived 以调试模式运行,使用调试级别日志详细度和将日志记录到 stderr

    onedrived start --debug

    要停止在调试模式下运行的onedrived 进程,请将 SIGINT 发送到进程或者单击 CTRL+C,如果它在终端中运行。

    运行 onedrived 作为守护进程

    建议在守护进程模式下运行日志文件之前,请执行以下操作:

    
    $ onedrived-pref config set logfile_path PATH_TO_SOME_WRITABLE_FILE
    
    
    
    

    要将程序作为守护进程启动,

    onedrived start

    要停止守护进程,

    onedrived stop

    或者将 SIGTERM 发送到进程。

    使用更多

    使用代理运行 onedrived

    onedrived 遵循标准 python 库函数 getproxies()的行为,从操作系统读取代理信息。 也就是说,使用环境变量 HTTP_PROXY ( 或者 HTTP_PROXY ) 运行命令,设置一个HTTP代理,并设置可变 HTTPS_PROXY ( 或者 HTTPS_PROXY ) 来设置HTTPS代理。 比如,

    $ HTTPS_PROXY=https://user:pass@host:port/some_path onedrived start --debug

    HTTPS代理必须具有可验证的SSL证书。

    List all authorized OneDrive accounts Remove an authorized account List all remote Drives Edit configuration of an existing Drive Edit ignore list (selective sync) Remove a Drive from onedrived Interactive mode
    $ onedrived-pref drive del
    Drives that have been set up:
     #0 - Drive"<some_drive_id_here>": Account: <some_account_email> (<some_user_id_here>)
     Local root:/home/xb/OneDrive
     Ignore file:/home/xb/.config/onedrived/ignore_v2.txt
    Please enter the # number of the Drive to delete (CTRL+C to abort): 0Continue to delete Drive "<some_drive_id_here>" (its local directory will NOT be deleted)? [y/N]: y
    Successfully deleted Drive "<some_drive_id_here>" from onedrived.
    命令模式

    命令模式等效为:

    onedrived-pref drive del --drive-id <some_drive_id_here> [--yes]

    如果使用参数 --yes,则指定的驱动器如果已经添加,将在没有确认的情况下删除。

    调整 onedrived的参数检查最新版本

    卸载

    使用 pip3 从系统中卸载 onedrived:

    $ pip3 uninstall onedrived

    如果在安装( 也就是说,onedrived 是作为系统级软件包安装的) 时未使用 --user 参数,则需要 root 权限才能运行上述命令。

    许可证

    MIT许可证。