この記事は、UEC Advent Calendar 2018 - Adventar 17日目の記事です。前日はid:takadanobabauecさんの「カモノハシの支離滅裂な文」でした。
追記 (2021/1/4)
とある筋により、この記事が未だに参照されていることを知りました。
しかし、絶妙に情報が古いため、若干新しいことが書いてあるところに誘導しておきます。
try_datakobo/installing_python3.md at master · nersonu/try_datakobo · GitHub
try_datakobo/installing_jupyter.md at master · nersonu/try_datakobo · GitHub
ちなみに、今ではcedも Anaconda ベースの Python 3系が入っています。
さて、なんやかんやでUEC Advent Calendarも3年目です。まともな記事を一つも書いた記憶がないので、少しはまともな記事を書けるようにやっていきたいと思います。ただ、今年はNimに関する記事が多い中恐縮ですが、Pythonの環境構築の話をしていきます。
経緯
私は、情報工学工房という授業の1テーマである「データ解析と機械学習」に参加しています。このテーマは経営科学系研究部会連合協議会主催のデータ解析コンペティションに出場し、やっていきを出しながらやっていく感じです(わからん)*1。学内の教育系サーバであるsolにコンペ使用するデータを置いてもらったはいいものの、基本的に外部持ち出しが禁じられているので、sol or ced*2で作業せんといけんのう、となりました。
pipのインストール先でも変えてやればなんとでもなるんかなと思っていましたが、solで python3
を叩くと
$ python3 -V
python3: Command not found.
そもそも入ってへんやんけ。といった調子です。一応2系は入ってますよ。めでたいですね。
$ python -V
Python 2.7.5
solには期待しね―わ。とか思っていると、我らがcedには入っていました。めでたい。
$ python3 -V
Python 3.4.5
おっ、まあ3.4.5やと3.5から使えるようになったnumpyの@
が使えへんくらいしか困らんし、なんとかなるやんけ。
ところが
$ pip -V
pip 18.0 from /usr/lib/python2.7/site-packages/pip (python 2.7)
$ pip3 -V
/usr/bin/pip3: Command not found.
くぅぅ。面倒くさいのう……。
前置きが長くなりましたが、そんなこんなあり、自分とこのホームの下にpython3の環境作ったほうが早いんちゃう?ということで、やりました。
Linuxbrew を入れる
python3をソースからビルドするんちゃうんかい。と思った方がいるでしょう。solだと問題なかったらしいのですが、cedで試しにビルドしたところ、pipがうまくいかず*3、パッケージ管理システム的なそれを使うほうがええんちゃう?となりました。
別にHomebrewを常に使っているわけではありませんが*4、その時はなんとなく、これを採用したわけです。
念の為、プロキシは通しておきます。.cshrc
にでも書いておくと良いでしょう。
$ setenv http_proxy http://proxy.uec.ac.jp:8080
$ setenv https_proxy http://proxy.uec.ac.jp:8080
$ setenv ftp_proxy http://proxy.uec.ac.jp:8080
$ setenv HTTP_PROXY http://proxy.uec.ac.jp:8080
$ setenv HTTPS_PROXY http://proxy.uec.ac.jp:8080
$ setenv FTP_PROXY http://proxy.uec.ac.jp:8080
git clone
でLinuxbrewを入れていきます。好きなところに入れればいいと思いますが、私は$HOME/local/
にぶち込んでいます。入れたい場所に事前にディレクトリを作っておきましょう。
$ cd ~/local/
$ git clone https://github.com/Linuxbrew/brew.git
入ったらbrew
にPATHを通すのと、cacheの指定をしておきます。.cshrc
にでも書いておいてください。
setenv HOMEBREW_CACHE $HOME/local/brew/cache
setenv PATH $HOME/local/brew/bin:${PATH}
setenv LD_LIBRARY_PATH $HOME/local/brew/lib:${LD_LIBRARY_PATH}
ほんでsource ~/.cshrc
しときましょう。
特に私の抜けがなれけば、これで任意のパッケージをインストール出来るようになっているはずです。
python3を入れる
brew
が使えればこっちのものなので、python3を入れていきます。
$ brew install python3
いつもの🍺が出れば、とりあえずお疲れ様でした。という感じです。
$ python3 -V
Python 3.7.1
$ pip3 -V
pip 18.1 from ...
ced(sol)で入れたbrewのパッケージをsol(ced)でも使えるようにするには?
sol(ced)のほうでもPATHを通せばいいだけです。
cedのホームはsolのホームにある.ced_centos
なので、それを考慮してPATHを通してください。
Jupyter Notebookを手元のPCのブラウザで使えるようにする
学外からssh
出来る関係上、ここではsolでやることを前提にお話します。
前提としてまずはsol(ced)にIPythonとJupyterを入れましょう。
$ pip3 install ipython jupyter
そうしましたら、後で使うSHA鍵を生成します。passwd()
後に任意のパスワードを入力してください。
$ ipython
In [1]: from IPython.lib import passwd
In [2]: passwd()
SHA鍵が生成されたら、次はJupyter Notebookの準備です。~/.jupyter/jupyter_notebook_config.py
を作り、以下のような内容を書いておきます。{生成されたSHA鍵}
の部分は先程生成されたSHA鍵に置き換えてください。
c = get_config()
c.IPKernelApp.pylab = "inline"
c.NontebookApp.ip = "*"
c.NotebookApp.password = 'sha1:{生成されたSHA鍵}'
c.NotebookApp.open_browser = False
c.NorebookApp.port = 8888
ここでのc.NorebookApp.port = 8888
は後で行うSSHトンネルで使うポート番号にしておきます。今回は8888
にしました。
設定は以上です。そうしましたら、手元のPCからSSHトンネルを使ってsolにアクセスします。<username>
は自分のものに置き換えてください。
$ ssh -L 8888:localhost:8888 <username>@sol.edu.cc.uec.ac.jp -Y
そして、Jupyter Notebookを起動します。
$ jupyter notebook
これでssh
している手元のPCのブラウザからhttp://localhost:8888
にアクセスし、passwd()
の時に入れた任意のパスワードを入力すれば、solで動かしているJupyter Notebookが無事使えるようになります。
もちろんのことですが、先に誰かが8888
を使っている場合は、別のところにJupyter Notebookが立つので、注意してください。
役に立つかどうかはわかりませんが、以上になります。たまにsolでの作業中にtop
コマンドを叩くと一番上に自分のユーザー名が来ていたりして、情報基盤センターから怒られないかビクビクしながら作業をしています。皆さんも学内の計算機資源を使って(あくまでも教育的目的に限りますが)、プログラムとかをガンガンぶん回していきましょう。
明日はshilfolさんです。