以前は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] エラー 127Ahhhhhhhh!
謎の改行コードっぽいエラーが出た。
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 runbecause it my call for Windows Subsystem for Linux- Do not use any Cygwin terminal as
mintty.exebecause therust langcompiler does not work with them
cmd.exeにてsh runで実行せよとのこと。shはwindowsでは使えないコマンドでは?
busyboxというものを使うLinuxのコマンドを使えるようにbusyboxを使う。
いくつか調べたが一番わかり易い次のサイトをベースにインストール。
Windowsでbusyboxを用いてLinuxの基本的なコマンドを使用する
windowsのpathの通し方が書いていないがこれもよく忘れるので参考サイト
このままだとmakeコマンドが見つからないエラーが出るので次のサイトを参考にしてwindows上でも使えるようにした。
PCを再起動。
make cleanCygwinから一旦ビルドしたものを消す。
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が最後まで走ることはなく、私の無知さも含めて公開されることになった。
これが役に立つことは無い気がするが、少しでも誰かの参考にだれば幸いだ。
