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は不要かもしれない。