AWSにpythonとjupyter labをさっくり導入する

モチベーション

  1. anacondaを使うとjupyter labまで自動で入るので便りっちゃ便利
  2. だけれどもかなり容量を食うし、anacondaそのものが不評である声が聞こえてくる
  3. とりあえずpython実験用に小さいインスタンスを作るのであれば、それ自体を隔離された環境と考えて、venvも不要として良い
  4. であれば、小さいインスタンスでさっくりjupyter labを使える環境が作れると便利なんじゃないか
  5. 結構情報が散在していたため、いくつかのサイトの情報をつなぎ合わせて一連の流れになるようにしたかった

※念のため、今回の手順でどれくらい容量を食うのか確認してみた

使用したインスタンスおよび設定

  • t2.micro 8GB SSD
  • Ubuntu 16.0.4 LTS
  • セキュリティグループで8890ポートを開放

準備

まずはお約束でapt-get updateとupgradeをしておく。

sudo apt-get update
sudo apt-get upgrade

pythonのバージョンを確認すると、

python3 --version
  Python 3.5.2

デフォルトでpython3.5.2が入っている
このままでも良いが、せっかくなのでアップグレードしてみる

pythonのアップグレード

www.python.jp

まずpipをインストールする

sudo apt install python3-pip python3-dev
sudo apt install python-pip python-dev

この段階でまだ6.4GBの余裕がある

df -h
udev            488M     0  488M   0% /dev
tmpfs           100M  3.3M   96M   4% /run
/dev/xvda1      7.7G  1.4G  6.4G  18% /
tmpfs           496M     0  496M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           496M     0  496M   0% /sys/fs/cgroup
/dev/loop0       87M   87M     0 100% /snap/core/5145
/dev/loop1       13M   13M     0 100% /snap/amazon-ssm-agent/295
tmpfs           100M     0  100M   0% /run/user/1000

python3.6をインストールする。

sudo add-apt-repository ppa:jonathonf/python-3.6
sudo apt-get update
sudo apt-get install python3.6 python3.6-dev
wget https://bootstrap.pypa.io/get-pip.py
sudo python3.6 get-pip.py

確認すると、

python3 --version
Python 3.5.2

python3というコマンドはpython3.5.2にひもづけられており、

python3.6 --version
Python 3.6.5

3.6はpython3.6というコマンドでないといけない。
なんにせよ、python3.6.5がインストールされた。

jupyter notebookのインストール

qiita.com

export LC_ALL=C
sudo apt-get update
sudo apt-get install -y python-pip libpq-dev python-dev libpng12-dev libjpeg8-dev libfreetype6-dev libxft-dev
sudo pip install -U pip
sudo pip install numpy pandas matplotlib seaborn scikit-learn plotly ipython[notebook]

最初のexportうんたらはいらない可能性もある。

次にjupyterのコンフィグファイルを生成する。

jupyter notebook --generate-config

これで上記コマンドを実行したディレクトリの直下(今回はホームディレクトリ)に.jupyterディレクトリが作られ、そのディレクトリ内にjupyter_notebook_config.pyというテキストファイルが生成されるので、viでいじる。

vi ~/.jupyter/jupyter_notebook_config.py

ファイルの先頭に以下の行を追加する

c.NotebookApp.ip = '*'
c.NotebookApp.open_browser = False
c.NotebookApp.port = 8890
c.NotebookApp.password = ''

ポート番号は各自のセキュリティグループの設定に合わせる。jupyterのデフォルトは8888らしい。
ただし、最初はpasswardの中身は空にし、以下のコマンドで暗号化パスワードを取得する。
その後、再度コンフィグファイルを編集してパスワードを追加する。

python3.6 -c "import IPython;print(IPython.lib.passwd())"

表示されたsha1:で始まる文字列をコピペすれば良い。

jupyter notebook

でjupyterを起動し、パブリックIP:ポート番号でブラウザでアクセスできればOK。

この段階で残り5.7GB。jupyterが意外に容量を食うよう。

df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            488M     0  488M   0% /dev
tmpfs           100M  3.3M   96M   4% /run
/dev/xvda1      7.7G  2.1G  5.7G  27% /
tmpfs           496M     0  496M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           496M     0  496M   0% /sys/fs/cgroup
/dev/loop0       87M   87M     0 100% /snap/core/5145
/dev/loop1       13M   13M     0 100% /snap/amazon-ssm-agent/295
tmpfs           100M  4.0K  100M   1% /run/user/1000

jupyter labのインストール

wshinya.hatenablog.com
nonbiri-tereka.hatenablog.com

まずjupyterのバージョンを確認する。

jupyter notebook --version
5.6.0

jupyterのバージョンが5.3以上ならば何の問題もなくインストールできるそうな。

pip install jupyterlab --user

※--userだとうまく行かなかったので入れてみた。

jupyter lab

でjupyter labを起動できる。
パブリックIP:ポート番号でブラウザでアクセスできればOK。

jupyter labの自動起動

このままだと毎回ターミナルを立ち上げてjupyterを起動しないといけないのでものすごく不便。
なので、インスタンス起動時にjupyter labが自動起動するように設定する。

まず、以下のコマンドでjupyter-labのフルパスを取得する。

which jupyter-lab

/home/ubuntu/.local/bin/jupyter-lab
今回の環境でのフルパスは上記の通り。

自動起動用のシェルを作る。

touch ~/start_jupyter.sh

これでホームディレクトリ直下にstart_jupyter.shなるシェルスクリプトが生成される。まだ中身は空なので、作成したシェルにvi等で先ほどのフルパスを書き込む。

シェルスクリプトパーミッションを変更する。

chmod 777 ~/start_jupyter.sh

インスタンス起動時に上記のシェルが実行されるよう、root権限で/etc/rc.localを編集する。

sudo vi /etc/rc.local

exit 0の前にsu - ubuntu /home/ubuntu/start_jupyter.sh &を書き込んで保存終了

インスタンスを再起動させ、jupyter labにアクセスしてみる。

sudo shutdown -r now

割と時間がかかり、かついつ再起動が完了したのかAWSのコンソールだけではわからないので、何回かやってみよう。
アクセス出来なさそうならいっそのことインスタンスをいったん終了させてから再度起動してみるのも良い。

jupyter labでは内部でterminalを開くことができるので、いちいちterminalを起動しなくても良い。
ライブラリのインストールとかそういう時に便利。

なお、jupyter lab内で立ち上がるpythonのバージョンは3.6.5であった。
jupyter labからconsole立ち上げ時に表示される内容

Python 3.6.5 (default, May  3 2018, 10:08:28) 
Type 'copyright', 'credits' or 'license' for more information
IPython 6.5.0 -- An enhanced Interactive Python. Type '?' for help.

ちなみに、ここまでやって残り5.6GBなので、手っ取り早く(お安く)jupyter環境を作るならこれで良いのではないかと。
※jupyter labで立ち上げられるterminalからコピペができなかった!

df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            488M     0  488M   0% /dev
tmpfs           100M  3.3M   96M   4% /run
/dev/xvda1      7.7G  2.2G  5.6G  28% /
tmpfs           496M     0  496M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           496M     0  496M   0% /sys/fs/cgroup
/dev/loop0       87M   87M     0 100% /snap/core/5145
/dev/loop1       13M   13M     0 100% /snap/amazon-ssm-agent/295
tmpfs           100M  8.0K  100M   1% /run/user/1000