以前はAnki
のソースコードより直接インポートしてプラグインを制作していたがpip
経由でインストールして開発する方式にいつのまにか変わったということに記事を執筆したあとで気づいた。
この記事ではAnki
本体をビルドしようと試みているが、記事がもったいないので公開する。
以下は無知の私の足跡である。プラグインが動かないと言っているのはこのあたりの仕様変更のため。
Anki
プラグインを作りたい正確には「以前作っていた」のだが、どういうわけか仕様が変わった?ようで以前のプラグインが動かなくなっていた。
もともとは海外の有志のページを参照して作っていたが、改めて公式のドキュメントを探してみると「Development
」のページに「README.development
」を読みなさいとある。
こちらはGitHubに公開されているファイルの中に存在する。
必要なパッケージと同時にビルドの方法が乗っている。
そもそも以前はpy
ファイルを直接呼び出せばいけたはずだが、私の環境で実行すると「anki.buildinfo
」が見つからないエラーが出る。
buildinfo
を調べるとコチラのフォーラムが最初にヒットする。
https://anki.tenderapp.com/discussions/ankidesktop/39028-about-buildinfo-and-ankirspy
I'm trying to do some python scripting with Anki. I cloned the source code from GitHub, when I run my code, I got the error for not finding anki.buildinfo and ankirspy. How to solve this?
Anki
のスクリプティングをしているのですが、GitHubのコードをクローンし自前のコードを実行すると「anki.buildinfo
」と「ankirspy
」が見つからないエラーがでます。どうしたらよろしいでしょうか?
私とほぼ同じ状況。これに対する公式の回答。
You'll need to build the code first - please see README.development
まず先にコードをビルドする必要があります。
README.development
を御覧ください。
ビルドが必須なのだろうか?
Cygwin
をインストールということでビルドを試す。
WSL
かCygwin
でビルドして下さいとある。
Linux
は普段からGUIを少し使っているがコマンドには詳しくないが「make
」コマンドを使ってビルドする模様。
Windows上で代替の手法を知らないので公式の指示に従いとりあえずCygwin
をインストールしてみる。
次の記事を参考にさせていただいた。
Windows上で動くUNIX?Cygwinのインストール&設定方法
インストールするパッケージは全く意味がわからないので全スキップした。
cdコマンドが効かない。調べる。
Cドライブの場合は
$ /cygdrive/c/...
で始める模様。とりあえずディレクトリ移動はできた。
説明では「./run
を実行しろ」とある。確かにrun
というファイルがあるが実行方法がわからないので調べる。
どうやらそのまま「./run
」と入力すれば良いらしい。
結果
$ ./run
./run: 行 5: make: コマンドが見つかりません
ほらね。どうせ先程のパッケージでインストールしてないとかだろう。
これはビンゴの模様。しかし驚いたことに先程Cygwin
をインストールした時に実行したSetup.exe
をもう一度実行してインストールするらしい。コマンドないのかよ!と突っ込んでしまった。
無事インストールできたのでもう一度ディレクトリを移動してmake
する。
fi;
/bin/bash: 行 3: dos2unix: コマンドが見つかりません
make: *** [Makefile:65: pyenv] エラー 127
ほらね!
先ほどと同様にまた上書きインストールでdos2unix
をインストールする。
pyenv/Scripts/activate: 行 3: $'\r': コマンドが見つかりません
make: *** [Makefile:94: develop] エラー 127
Ahhhhhhhh!
謎の改行コードっぽいエラーが出た。
Vs Code
で対象のファイルを確認すると
なるほど。他のファイルは全てLF
になっている。
とりあえずここをクリックして上にでたオプションからLF
にして保存
もう一度./run
/bin/bash: rustup: コマンドが見つかりません
make[1]: *** [Makefile:90: .build/tools] エラー 127
make[1]: ディレクトリ '/cygdrive/c/Users/Domin/Desktop/anki-master/rspy' から出ます
終りが見えない。
今度はrustup
をインストールしようと思い今までと同じようにsetup
から行うと・・・ない。最初から5割ほど諦めていたが、既に諦め度が8割を超えてきた。
https://www.rust-lang.org/tools/install
どうやらコチラからダウンロードすれば良さそうだ。64bit版のexeを動かしてみる。
DOS画面が文句を言っている。
Rust Visual C++ prerequisites
Rust requires the Microsoft C++ build tools for Visual Studio 2013 or later, but they don't seem to be installed.
The easiest way to acquire the build tools is by installing Microsoft Visual C++ Build Tools 2019 which provides just the Visual C++ build tools:
https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2019
Please ensure the Windows 10 SDK and the English language pack components are included when installing the Visual C++ Build Tools.
Alternately, you can install Visual Studio 2019, Visual Studio 2017, Visual Studio 2015, or Visual Studio 2013 and during install select the "C++ tools":
https://visualstudio.microsoft.com/downloads/
Install the C++ build tools before proceeding.
If you will be targeting the GNU ABI or otherwise know what you are doing then it is fine to continue installation without the build tools, but otherwise, install the C++ build tools before proceeding.
Continue? (Y/n)
うーむ。今度はVisual C++ Build Tools 2019
が無いらしい。
対象のURLから飛んでBuild Tools for Visual Studio 2019
をインストールしてみる。色々ありすぎて違う気もする。
DLして実行するとインストール画面が出るのでC++ Build Tools
をチェックしてインストール
やたら重い。不安になるが5分ぐらいで完了。
再起動を求められる。
再びRustをインストール。
今度は成功した。
比較的新しいプログラミング言語。まだ知名度は低め。
Cのようにコンパイルが必要なため実行速度がC言語並に早い。
型とリソース管理でメモリの安全性が高い。
インストールが簡単。学習難易度が高い。
など、いろいろ特徴がある言語のようだ。
高速で動くのであれば仮想通貨トレードのバックテストには良いかも・・・?
とりあえずサクサク次に行こう。
/run
してビルドどうやらエラーなく進んでいる模様。
なんだか見覚えがあるメッセージが出て画面が止まる。
maturin develop --release --strip
そういえば冒頭のコミュニティにここで止まるがどうしたらいい?と書いてあった。
The first time that command runs, it needs to download Rust libraries, and if your internet connection is slow that may be taking a long time - you could monitor the download using the network tab of activity monitor.
意訳:最初はRustライブラリのDLで時間がかかります。インターネットが遅ければ時間がかかるかもしれません。アクティビティモニタのネットワークタブで確認できるかも。
アクティビティモニタがなにかは分からないが、少し待ってみる。
※MACの管理ツール的な物のようだった。
止まっていた画面がどんどん流れはじめる。どうやら成功した模様。
CPUの使用量が100%になる。
protoc
コマンドがみつかりませんほらね。
/bin/bash: protoc: コマンドが見つかりません
Cygwinのページに固有ページがあるのでこちらもSetupからインストールできそう。
protobuf
という名前でパッケージを検索
沢山ある。どれだろう。
とりあえずCygwin
のページで先頭に指定してあるこれをインストールしてみる。バージョンは3.7.1-1
にして次へ
どうやら必要なものは自動で追加される模様。
perl
コマンドが見つかりません./run
を実行すると即エラー
perl: コマンドが見つかりません
もう一度インストール
おそらくコレでいいだろう。カテゴリが「インタプリタ」になっているため言語なのは間違いない。
インストールして再び./run
ビルドが走り始めたのでひとまず安心。
わけワカメです。またコマンドが見つからないようです。
./scripts/build-mo-files: 行 18: msgmerge: コマンドが見つかりません ./scripts/build-mo-files: 行 18: msgfmt: コマンドが見つかりません
よく考えたらそういえばREADME.development
に一覧が書いてあったような・・・
とあった。確かにいままで引っかかったものが入っている。とはいえmsgmerge
,msgfmt
はない。
gettext
で調べると一緒にmsgmerge
等が引っかかるのでこれに含まれる?
ついでにrsync
curl
こちらをインストール。
ripgrep
も cargo
もインストーラーからは指定不可能。
ここで一度./run
してみる
失敗。同様のエラー。
protoc
の例からgettext-devel
を入れてみる。devel
という接尾辞が付いているという理由。devel
とはなんだろうか?
たぶんNode.js
でいうところの開発用ライブラリdevDependencies
のようなものなのでは?
バージョンはgettext
無印と完全一致。
では、インストールして./run
する。
どうやらあっていたようでエラーなし。
諦めず./run
No module named 'PyQt5.QtWebEngineWidgets'
というエラー。PyQt
は聞いたことが有る。Python
のGUI
化ツールではないだろうか。
そういえば書いてなかったがAnki
はPython
で書かれたプログラムだ。
Starting Anki... Traceback (most recent call last):
こんな表示も出ている。
Traceback
はPython
の例外処理で止まっているはず。Anki
実行直前まできている?
pip install
できるのか?試してみる。
Cygwin
にて
$ pip install PyQt5
正常に起動。インストールされた模様。
では、もう一度./run
エラー。
そうか、PyQt5
が無いわけではなかった。PyQtWebEngine
なんとかと言っている。
少し調べるとこちらのサイトにてパッケージが分離されたとのこと。
PyQt5.12でWebEngineWidgetsが分離された
次のコマンドを実行。
$ pip install PyQtWebEngine
こちらも正常終了。では./run
エラー。謎だ。
ああ、またCygwin
のSetup
からインストールしないといけないのか?仕組みが理解しきれていない。
とりあえず今までの経験から
pyqt5-common
, pyqt5-devel
をインストール
これまたたくさんありすぎて違う気もする。
やはり、エラー。
pip list
バージョンが違うからだろうか?
pyqt5
をpip uninstall
してバージョンを落とす
$ pip install pyqt5==5.14.0
./run
エラー。
README.develop
を読み直すなんと下の方にWinodws
向けのセットアップ方法が書いてあった。
だいたいコレまでにやってきたことが書いてある。
最後に気になる点が。
Open a
cmd.exe
(command prompt) on the Anki repository and run the commandsh run
- Do not use
bash run
because it my call for Windows Subsystem for Linux- Do not use any Cygwin terminal as
mintty.exe
because therust lang
compiler does not work with them
cmd.exe
にてsh run
で実行せよとのこと。sh
はwindows
では使えないコマンドでは?
busybox
というものを使うLinux
のコマンドを使えるようにbusybox
を使う。
いくつか調べたが一番わかり易い次のサイトをベースにインストール。
Windowsでbusyboxを用いてLinuxの基本的なコマンドを使用する
windowsのpathの通し方が書いていないがこれもよく忘れるので参考サイト
このままだとmake
コマンドが見つからないエラーが出るので次のサイトを参考にしてwindows
上でも使えるようにした。
PCを再起動。
make clean
Cygwin
から一旦ビルドしたものを消す。
anki
のフォルダに入ってmake clean
コマンドプロンプトからからやるとエラーになるので注意。
sh run
ビルドが走りはじめる。
また謎のエラー。
protoc --proto_path=../proto --python_out=anki --mypy_out=anki ../proto/backend.proto ../proto/fluent.proto process_begin: CreateProcess(NULL, protoc --proto_path=../proto --python_out=anki --mypy_out=anki ../proto/backend.proto ../proto/fluent.proto, ...) failed. make (e=2): 指定されたファイルが見つかりません。 make[1]: *** [.build/py-proto] エラー 2
先程のprotoc
のようだが内容がよくわからない。
ここで万策尽きる。
Cygwin
に戻って./run
も同様のエラー。
buildinfo.py
はどうか?ビルドそのものは成功しているのではないかと思うのでanki
のフォルダから冒頭で「見つからなかった」buildinfo.py
を検索してみるとanki-master\qt\aqt
の中に生成されている模様。
ひとまず次回は以前作成したプラグインを実行してみるテストへシフトしよう。
完全なる日記。
結局./run
が最後まで走ることはなく、私の無知さも含めて公開されることになった。
これが役に立つことは無い気がするが、少しでも誰かの参考にだれば幸いだ。