kuroの覚え書き

96の個人的覚え書き

HGCスパコンにpyenvとpython3.6.1を入れて使う

HGCのスパコンpythonを使おうとしたところ、なにもしないと2.7.10が起動し、/usr/local/package/python/3.4.1を使おうとしたらなにやらライブラリがないと言って起動してくれない。

ということでpyenvを導入した上でpython3.6.1を使えるようにユーザー環境にインストールしてみる。

まずはpyenvをインストールする。関連するライブラリは多分揃っていると思うので

$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv

とgitでまるっと入れてやる。

$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(pyenv init -)"' >> ~/.bashrc

と.bashrcを編集し

$ source .bashrc

とやって準備OK

$ pyenv --version
pyenv 1.1.3-25-gfd0b8fc 

python3はmacで使ってるバージョンに合わせて3.6.1にすることにして

$ pyenv install 3.6.1
Downloading Python-3.6.1.tar.xz...
-> https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz
Installing Python-3.6.1...
Installed Python-3.6.1 to /home/kkuro/.pyenv/versions/3.6.1

これでインストールはできた。
2.7から3.6への切り替えは

$ pyenv global 3.6.1
$ pyenv rehash

と打つ。
これで

$ python --version
Python 3.6.1

となっているのでpythonと打てば3.6.1が走る。

なお2.7を使う必要がある時には

$ pyenv global system

とするとシステム標準の2.7.10が走るようになる。

と、これでうまくいくと思ったがやっぱりエラーが出て動かない。

$ python
Fatal Python error: Py_Initialize: Unable to get the locale encoding
ModuleNotFoundError: No module named 'encodings'

Current thread 0x00002acd19cce200 (most recent call first):
アボートしました (コアダンプ)

結局のところ.bashrcの記述を

#python2.7
#export PYTHONHOME=/usr/local/package/python2.7/current
#export PYTHONPATH=~/local/lib/python2.7/site-packages

#python3.6.1
export PYTHONHOME=~/.pyenv/versions/3.6.1/
export PYTHONPATH=~/.pyenv/versions/3.6.1/lib/python3.6/site-packages/

export PATH=${PYTHONHOME}/bin:${PATH}
export LD_LIBRARY_PATH=${PYTHONHOME}/lib:${LD_LIBRARY_PATH}

このように書き換えてやって始めてちゃんと動いた。しかしこれじゃpythonのバージョンを頻繁に切り替えるのが面倒くさいのだが。


ついでにここまでやって例のデータベースを動かしてみると、コンソールではちゃんと動いているっぽいが、webブラウザでアクセスするとポートが閉じられているためかアクセスできないので確認はできなかった。localhostでも駄目なのね。


virtualenvの環境切り替えについては、データベースサーバの起動スクリプト
run.sh

#!/bin/sh
export PYTHONHOME=~/.pyenv/versions/3.6.1/
export PYTHONPATH=~/.pyenv/versions/3.6.1/lib/python3.6/site-packages/
export PATH=${PYTHONHOME}/bin:${PATH}
export LD_LIBRARY_PATH=${PYTHONHOME}/lib:${LD_LIBRARY_PATH}
pyenv global 3.6.1
pyenv rehash
source ./venv3/bin/activate
python manage.py runserver

こんな感じに作っておいて、manage.pyのあるディレクトリ(ここにvenv3もあるものとする)において起動させると良いかもしれない。そうすれば.bashrcは2.7環境の設定のままでいいはず。

まあ、終了した後には
stop.sh

#!/bin/sh
deactivate
source ~/.bashrc
pyenv global system

こんなスクリプトを忘れずに走らせておく必要がある。

追記
Ctrl+Cで終了するとvirtualenvも同時に終了するようなのでstop.shでdeactivateは不要かもしれない。