anki本地服务同步

以下内容 基于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
最后将该文件发送到桌面快捷方式即可,下次直接在桌面双击该快捷方式即可启动服务器。

补充

  1. 电脑重启后不能用了:
    问题可能在电脑重新连接无线网了,这时路由器给电脑分配的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发送到手机?!!以后再说吧)

  1. 切换到新的无线网:
    参考上面,重新搞ip
  2. anki(ankidroid)不要更新

参考

FanPenglei/anki-sync-server

anki中国


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'

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

樊大炮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值