以下内容 基于PC端 anki 2.15 、Android端 AnkiDroid 2.97 采用 Ankisyncd 在同一无线网连接下同步 所写
PC端 anki 2.15 下载** 、 **Android端 AnkiDroid 2.97 下载
本人已有环境
pc端:
python 3.7
pip 20.1
anki 2.15
win10(1909)专业版自带的ubutun
Android端:
ankidroid 2.97
在PC端进行本地服务器配置
开始栏启动ubutun,设置用户名及密码。(第一次用的话需要设置)
下载安装git
$ sudo apt-get install git
新建一个文件夹(也就是下面服务器所在文件夹)并打开,shift+鼠标右键
打开Linux shell
键入如下命令
$ git clone https://github.com/FanPenglei/anki-sync-server.git
然后cd
$ cd anki-sync-server
接着update
$ git submodule update --init
继续cd
$ cd anki-bundled
然后
在最初建的空文件夹里边找到anki-sync-server
文件夹,打开里面的anki-bundled
文件夹,选择并打开requirements.txt
,将pyaudio
这一行删掉,然后保存文件。
接下来关掉ubutu,
在anki-bundled
文件夹中shift+鼠标右键
打开Power shell
,依次怼入下面代码下载三方库,这个cmd窗口暂且称之为cmd1
pip install -r requirements.txt
pip install webob
等三方库下载完用下面这个后查看本机ip地址
ipconfig
记着这个ip地址,下面要用
在anki-sync-server
文件夹中shift+鼠标右键
打开Power shell
,这个称之为cmd2
在cdm2中
python ankisyncctl.py adduser <username>
<username>
改为你想要设置的账户名
然后回车根据提示,键入密码
接着(还是在cmd2中)
python -m ankisyncd
可以看到最后一行的27701
在浏览器地址中输入ip和27701如下:
192.168.1.7:27701/
如果出现Anki Sync Server则说明本地服务器配置完成了,这时cmd1没用了可以关掉,但cmd2不要关(关掉就相当于是把服务器给关了)
配置PC端anki
打开anki
工具
→附加组件
→查看文件
在addons21
文件夹中新建一个名为ankisyncd
的文件夹并打开,新建文件命名为__init__.py
,用记事本打开它输入以下内容
import anki.sync, anki.hooks, aqt
addr = "http://192.168.1.7:27701/" # put your server address here
anki.sync.SYNC_BASE = "%s" + addr
def resetHostNum():
aqt.mw.pm.profile['hostNum'] = None
anki.hooks.addHook("profileLoaded", resetHostNum)
注意:其中第三行ip地址为刚才输入浏览器的地址
然后重启anki,同步时账户选择之前cmd2中设置的账户密码(如果同步失败则原因可能是:服务器断了,此时需要重新启动服务器,也就是在anki-sync-server
文件夹中shift+鼠标右键
打开Power shell
输入python -m ankisyncd
配置Android端ankidroid
设置→高级设置→自定义服务器→使用自定义服务器
然后就可以登录之前设置的本地账户进行本地同步了
注意:ip地址和前面保持一直;是http不是https。由于AnkiDroid 从 2.10 开始强制使用 https,所以要用最简单的办法是退回 2.9 版本,禁止更新即可。(GitHub 上 2.9.7 版的下载地址)
在桌面快速打开服务器
在anki-sync-server
文件夹中新建记事本任意名字.txt
并打开输入
cmd /k "python -m ankisyncd"
保存后将后缀改为bat
最后将该文件发送到桌面快捷方式即可,下次直接在桌面双击该快捷方式即可启动服务器。
补充
- 电脑重启后不能用了:
问题可能在电脑重新连接无线网了,这时路由器给电脑分配的ip地址变了。解决办法是将上述配PC端anki步骤时的那个__init__.py
文件中的ip地址改为新的,然后Android端的也改一下。---------------此处换行---------------
因为比较懒,不想每次同步时都改ip,所以将__init__.py
文件中的内容替换为如下:
import socket
def get_host_ip():
"""
查询本机ip地址
:return: ip
"""
try:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(('8.8.8.8', 80))
ip = s.getsockname()[0]
finally:
s.close()
return ip
import anki.sync, anki.hooks, aqt
# addr = "http://192.168.1.3:27701/" # put your server address here
addr = get_host_ip() + ":27701/"
anki.sync.SYNC_BASE = "%s" + addr
def resetHostNum():
aqt.mw.pm.profile['hostNum'] = None
anki.hooks.addHook("profileLoaded", resetHostNum)
替换之后PC端就不用每次手动去改ip了,但是Android端还需要老老实实的去改ip(小想法:通过邮箱把新ip发送到手机?!!以后再说吧)
- 切换到新的无线网:
参考上面,重新搞ip - anki(ankidroid)不要更新
参考
md,有瑕疵,完美用了三天后,pc端anki无法同步了,Android端没问题。再说吧,反正我不怎用电脑看anki
同步失败:
Traceback (most recent call last):
File "aqt\sync.py", line 409, in run
File "aqt\sync.py", line 432, in _sync
File "lib\site-packages\anki\sync.py", line 572, in hostKey
File "lib\site-packages\anki\sync.py", line 552, in req
File "lib\site-packages\anki\httpclient.py", line 36, in post
File "lib\site-packages\requests\sessions.py", line 581, in post
File "lib\site-packages\requests\sessions.py", line 533, in request
File "lib\site-packages\requests\sessions.py", line 640, in send
File "lib\site-packages\requests\sessions.py", line 731, in get_adapter
requests.exceptions.InvalidSchema: No connection adapters were found for '192.168.1.3:27701/sync/hostKey'