replyツイートさくらレンタルサーバーに、Python3.6と、numpy、scipy、scikit-learn、gensimなどのPythonモジュールをインストールした模様をレポートします。これらのインストールの前に、必要なgcc、gfortranのインストールからレポートを始めます。はじめに機械学習の結果のCGIを動かす環境が必要になりました。Python3の、scikit-learn、gensimを使ったCGIです。VPSを借りれば良いのでしょうが、とりあえずさくらレンタルサーバーでやってみようと。gensimにはnumpy、scipyが必要。LAPACK)が必要。代数演算ライブラリのビルドにはFortranが必要。さくらレンタルサーバーにはgccはあるけどgfortranは入っていない。Python2.7は入っているけどPython3は入っていない。いうことでアップデートも兼ねてgccからインストールしよう!後悔先に立たず。良い子はマネしちゃダメ。以下のレポートについて本稿はさくらレンタルサーバーに特化した、FreeBSD、管理者権限なしでのインストールのレポートです。(Linuxだったり管理者権限があったりする場合はもっと簡単なことでしょう。)FreeBSDへのLinux等のパッケージのビルドはPortsを利用するのが正統なようです。レンタルサーバーにPortsは入っていないでしょうし、管理者権限もありません。それでも以下のように必要なもののビルドは可能でした。実行時に何かしらエラーはでるかもしれません。追試しようと思われている方は、一度長文(5000文字超)を通し読みして頂いたほうがよろしいかと思います。その上で自己責任にてお願いします。試行錯誤の連続でしたので、正確に記録していません。記述間違いはあると思いますので、各位の経験で補正してください。パッケージ名は作業ディレクトリに残っているのを見ればわかるのですが、ダウンロードURLは記録していません。検索してお探しください。(ほぼGNUのサイトですが。)そしてインストールするツールやモジュールのバージョンが異なると、このレポートとは異なるエラーも出ることでしょう。ビルドはレンタルサーバーのCPUリソースが必要でしょうから、極力しないことをおすすめします。(自分のことは棚に上げて。)事前準備ユーザーディレクトリ直下にlocalを作成して、インストールは全てここにすることにします。作業用にtmpディレクトリも作ります。.cshrcもあらかじめ編集しておきます。pathの最初に「$HOME/local/bin」を追加し、以降に環境変数の設定を追加します。$HOME/local/lib上の記述は十分で無いかもしれませんが、この内容で以下のレポート内容は可能でした。~/tmp以降、一つ一つのイントールが完了するたびに上を行い、直後からツールが使えるようにして作業ディレクトリにもどります。これらの記述は、以降省略します。慣れている方にとっては当たり前ですが、そうでない方はお忘れなく~。GNUツールのビルドとインストールまずはGNUのツールからインストールします。gccに必要なツールのインストールインストール方法は、凡そ以下です。installインストールしたパッケージは以下です。gmp-5.1.3.tar.xzmpfr-3.1.5.tar.xzmpc-1.0.2.tar.gzmake-3.82.tar.gzbinutils-2.29.tar.gzgccのインストールに必須なのは最初の3つ。gmpは6系だとm4がないとかエラーがでました。既存のmakeはFreeBSDのものなので、理解できない変数があるとエラーが出がち。makeも入れてしまえ。既存のmakeでビルドできるのは、ちょっと古い上のバージョン。(一回入れてしまえば、それで新しいのも入るかも。)binutilsも入れておきます。gccのインストールパッケージはgcc-6.4.0.tar.gzです。LDFLAGS_FOR_TARGET="-L$HOME/local/lib"ですが、~FLAGS_FOR_TARGETも設定してあげないとエラーになりました。環境変数に適切に設定すれば必要ないのかもしれませんが、試行錯誤の結果がこの形です。あと最初は--enable-languagesを指定していませんでしたが、javaのライブラリのビルドでエラーがでるので、fortranまでの指定にしました。gfortranが使えることを確認します。Python3のインストールとCGIテスト続いてPython3をインストールします。installsourceの後にpython3とpip3が使えることを確認します。以降pythonと打ってしまうと、/usr以下の2.7が動くのでご要注意を。章に書きますPythonモジュールのインストールにおいて、CGIの実行時ではじめてエラーがでる、という場合が多々ありました。最初にCGIのテスト環境を作っておき、逐次CGIでの確認を行う方が効率良いです。HTTPでアクセスできるそのテスト環境を「~/www/test」とします。~/www/testそして以下の2つのファイルを作成し、FTPなどでこのディレクトリにアップロードします。(さくらレンタルサーバーは拡張子が.cgiの場合は.htaccessはいらないかも。all.")1行の「/home/your-site/」はユーザーディレクトリです。各位の環境に読み替えて下さい。(以下同様)そして少なくとも、この行の改行コードはLFでないと動きません。(CRLFでも後ろに記号を付けるという回避策があったかと思いますが忘れました。)コンソールに戻りパーミッションを変えます。3.6.2」のように表示されることを確認します。(numpyはまだインストールしていないのでFail。)そしてブラウザからtest.cgiにアクセスし、同様に表示されれば成功です。500エラーが出る場合は、各ファイルの内容、改行コード、パーミッションを確認してみてください。Pythonモジュールのインストールの準備Pythonモジュールのインストールの前に、幾つか準備が必要です。numpy,scipy,scikit-learnが参照する代数演算ライブラリからインストールします。(ここからURLもメモしてあります。)ATLASのインストール代数演算ライブラリのATLASをLAPACK付きでインストールします。このビルドにFortranが必要です。atlas.3.10.3.tar.bz2をダウンロードします。オプションは、展開後ディレクトリのdoc/atlas_install.pdfを参考にしました。installでエラーが出ますが、dllとかdylibとか必要ない拡張子のファイルのコピーの失敗なので気にしないことにします。numpy」の実行時に「libtatlas.soが参照するlibgfortran.soが見つからないよ。再インストールし直せ」というエラーが発生しました。(sshから叩くと発生しません。)そこで以下のように、libtatlas.soをビルドし直したところ、CGIでのエラーは消えました。-rpath-link」で$HOME/local/libを設定していましたが、上では「-Wl,-rpath」にしています。-rpath-linkでもよいように思うのですがね。(今見るとスペースのせいでしょうか。makeではダブルクォーテーションがあり、このコマンドラインは失敗していました。)もう一つのlibsatlas.soも一応リンクし直しておきます。~/local/libCGIでの実行時にLD_LIBRARY_PATHが有効になるやり方があれば、この工程は必要ないのでしょう。モジュールのエラーPythonモジュールを普通にインストールしたとき、sshから手で叩くと実行できるのにCGI経由だとエラーがでるケースがありました。それらのエラーは、前節のATLASと同様「共有ライブラリ(so)からさらに共有ライブラリを呼ぶときに見つからない」というものです。LD_LIBRARY_PATHかDT_RUNPATHの類の環境変数を設定すれば良いかと思いましたが、さくらレンタルサーバーのsuexec経由では.htaccessでのSetEnvが効きません。"/home/your-site/local/lib"」とかやってもエラーは消えませんでした。シェルスクリプト等で環境変数を設定する踏台CGIを作るという手も考えられますが、その度に踏台を作るのも面倒です。ここでの解決策は「rpathを指定してビルドする」という面倒なものです。ライブラリパスが設定できる解決策がありましたら、そちらのほうが楽です。(リンカ―のrpathオプションは、オブジェクトが共有ライブラリを探すときのパスをそのオブジェクト自身に書き込む、というものです。)pip.confの作成rpathの指定はpipのオプションで指定できます。