OctaveのPackagesを全部インストールする
研究のためにMATLABを使う機会が増えてきました。
家でも動かしたいからOctaveを導入してみました。
その際に、数多のパッケージをいちいちインストールするのが面倒だったので、
全部インストールするスクリプトを書きました。
install_all_packages.m
% package一覧 v_all = pkg('list', '-forge') ; % ループ while true % インストール済みのパッケージ名を取得 v_installed = pkg('list') ; names_installed = {} ; for i=1:length(v_installed) names_installed(end+1) = {v_installed{i}.name} ; end for i=1:length(v) % 未インストールならインストールを試みる name_pkg = v{i} ; if ~strcmpi(name_pkg, names_installed) try disp(['try installing : ' name_pkg]) ; pkg('install', '-forge', name_pkg) ; disp(['installed : ' name_pkg]) ; catch e disp(['failed : ' name_pkg]) ; end end sleep(0.1) ; end % 何もインストールされなければループ脱出 num_ins_bef = length(v_installed) ; num_ins_aft = length(pkg('list')) ; if num_ins_bef==num_ins_aft disp(['finished ! ' num2str(num_ins_aft) 'installed']) ; break ; end end
全部終わるのに結構時間がかかると思います。
環境によってはプロンプトにwarningとかerrorとか大量に表示されるかと思いますが、放置してください。
以下、簡単な説明・・・
仕組み
まずv_all = pkg('list', '-forge')
でインストールできそうなパッケージの一覧を取ってきます。
続いてv_installed = pkg('list')
でインストール済みのパッケージの一覧を取得します。
この一覧と先ほどのv_all
を比べてやって、インストールしていないパッケージを選定します。
インストールするのは
try disp(['try installing : ' name_pkg]) ; pkg('install', '-forge', name_pkg) ; disp(['installed : ' name_pkg]) ; catch e disp(['failed : ' name_pkg]) ; end
↑の部分です。try
catch
でくくっています。
これは、インストールの際になんかよくわからないエラーが発生するためです。
でもまぁ大体はインストールできるし、そんな重要そうでもなかったので、エラー処理は何もしておりません。
最後に、インストールを試みる前後でインストール済みのパッケージ数が変わるかを見て、変わればループ続行、変わらなければループを抜けます。
それぞれのパッケージには依存関係があり、インストールする順番が正しくないとインストールされないものもあるため、ループさせています。
(本来なら依存関係を調べてからインストールするものですが、まぁ・・・)
以上です。
Mac OS X 10.9で試しました。Windowsでも動けばいいなぁ。