在ubuntu上使用onedrive
自从使用了onedrive过后就像发现宝贝似得,跨机器自动同步文件很是方便,特别是一些正在进行调试笔记、开发文档。所以在ubuntu也马上考虑使用onedrive。
I. dependences
通过apt安装如下依赖工具包。
# Install gcc and other C-level pre-requisites.
$ sudo apt-get install build-essential python3-dev libssl-dev inotify-tools python3-dbus
gcc
python3-dev
$ python3 --version Python 3.5.2
libssl-dev
inotify-tools
python3-dbus
(or probablylibdbus-glib-1-dev
)
安装pip3和setuptools。
# 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
同时还需要手动下载ngrok,解压后导出环境变量NGROK
。
export NGROK=~/utils/ngrok
II. install
成功下载依赖过后通过通过clone源码安装onedrived。
$ git clone https://github.com/xybu/onedrived-dev.git
$ cd onedrived-dev
# Or use the built-in setuptools package from Python.
$ python3 ./setup.py install --us
III. config
成功安装onedrived后系config统会增加onedrived
和onedrived-pref
两个应用工具。
$onedrived #tab 自动补全
onedrived onedrived-pref
需要通过onedrived-pref
配置onedrive信息,选择交互模式执行命令添加账户onedrived-pref account add
。该命令会生产onedrive登录链接并提示你浏览器打开。成功打开该链接后会自动引导从Microsoft登录onedrive,成功登录后会自动跳转到空白网页,并且生成包含登录token的url,我们拷贝该url到命令输入窗口完成认证。
$ 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
提示:成功登录后的空白页会显示https://login.live.com/oauth20_desktop.srf?code=xxxxxxx-4041-b23e-baac-xxxxxxxxxx&lc=2052
格式的认证信息。
完成登录认证后还需要去通过 onedrived-pref drive set
配置onedrive本地路径和配置文件路径。
$ onedrived-pref drive set
Reading 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
之后便可以通过通过daemon模式启动onedrive完成同步。
$onedrived-pref config set logfile_path ~/onedrived.log
提示:如上~/onedrived.log
为onedrive日志文件,首次启动强烈建议通过该日志分析异常。
$onedrived start
$onedrived stop
IV. troubleshootings
Error reading ngrok API
[2019-12-21 13:31:18,605] ERROR: MainThread: Error reading ngrok API: ngrok API did not return any tunnel.. Retry in 1sec.
参考如上dependences手动下载ngrok,解压后导出环境变量NGROK
onedrivesdk install failed
Writing /tmp/easy_install-mch5gxnb/onedrivesdk-2.0/setup.cfg
Running onedrivesdk-2.0/setup.py -q bdist_egg --dist-dir /tmp/easy_install-mch5gxnb/onedrivesdk-2.0/egg-dist-tmp-hlme4ic3
error: [Errno 20] Not a directory: '/tmp/easy_install-mch5gxnb/onedrivesdk-2.0/setup.py/../NOTICE.rst'
参考 https://github.com/xybu/onedrived-dev/issues/128 修改onedrived-dev
根目录下requirements.txt
文件中的onedrivesdk版本<2.0
$cat requirements.txt
#onedrivesdk
onedrivesdk<2 #patch
ImportError: cannot import name 'loosebidict' from 'bidict'
Traceback (most recent call last):
File "/home/lijie/.local/lib/python3.8/site-packages/onedrived-2.0.0-py3.8.egg/onedrived/od_models/bidict.py", line 2, in <module>
from bidict import loosebidict
ImportError: cannot import name 'loosebidict' from 'bidict' (/home/lijie/.local/lib/python3.8/site-packages/bidict-0.21.2-py3.8.egg/bidict/__init__.py)
During handling of the above exception, another exception occurred:
AttributeError: module 'bidict' has no attribute 'OVERWRITE'
bidic 版本过高,这里删除后安装pip3 install bidict==0.19.0 版本。
博主我又出现问题了,今天手贱restart了一下就启动不了了
~$ onedrived start
/home/admin1/.local/lib/python3.8/site-packages/onedrived/od_models/bidict.py:6: UserWarning: bidict.OVERWRITE has been deprecated, use bidict.DROP_OLD instead.
on_dup_val = bidict.OVERWRITE
Starting onedrived ... FAILED
看起来只是一个警告,确认下是否是这里引起的,再次pip list 检查版本号,不行的话就按照提示替换 bidict.OVERWRITE到bidict.DROP_OLD试试。
版本:Ubuntu 20.04
最后ImportError,bidct降到0.19.0还是报错
Traceback (most recent call last):
File "/home/admin1/.local/lib/python3.8/site-packages/onedrived/od_models/bidict.py", line 2, in
from bidict import loosebidict
ImportError: cannot import name 'loosebidict' from 'bidict' (/home/admin1/.local/lib/python3.8/site-packages/bidict/__init__.py)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/bin/onedrived", line 33, in
sys.exit(load_entry_point('onedrived==2.0.0', 'console_scripts', 'onedrived')())
File "/usr/local/bin/onedrived", line 25, in importlib_load_entry_point
return next(matches).load()
File "/usr/lib/python3.8/importlib/metadata.py", line 77, in load
module = import_module(match.group('module'))
File "/usr/lib/python3.8/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "", line 1014, in _gcd_import
File "", line 991, in _find_and_load
File "", line 975, in _find_and_load_unlocked
File "", line 671, in _load_unlocked
File "", line 783, in exec_module
File "", line 219, in _call_with_frames_removed
File "/home/admin1/.local/lib/python3.8/site-packages/onedrived/od_main.py", line 15, in
from . import od_repo
File "/home/admin1/.local/lib/python3.8/site-packages/onedrived/od_repo.py", line 16, in
from .od_models.path_filter import PathFilter as _PathFilter
File "/home/admin1/.local/lib/python3.8/site-packages/onedrived/od_models/__init__.py", line 1, in
from . import account_profile, bidict, drive_config, path_filter, pretty_api, webhook_notification
File "/home/admin1/.local/lib/python3.8/site-packages/onedrived/od_models/bidict.py", line 5, in
class loosebidict(bidict.bidict):
File "/home/admin1/.local/lib/python3.8/site-packages/onedrived/od_models/bidict.py", line 6, in loosebidict
on_dup_val = bidict.OVERWRITE
AttributeError: module 'bidict' has no attribute 'OVERWRITE'
请问如何解决,非常感谢博主!
pip3.8 list 确认下版本号,不行的话先确认 pip uninstall删除。
使用
~$ python3 -m pip install bidict==0.19.0
降级,这个问题解决了,感谢
pip后的版本号21.0.1,这要怎么操作
在ubuntu20.04 出现 bidct 0.21.2依赖错误,降级后正常。