![]() |
ノート/python開発環境〜pyenvとvirtualenvhttp://pepper.is.sci.toho-u.ac.jp/pepper/index.php?%A5%CE%A1%BC%A5%C8%2Fpython%B3%AB%C8%AF%B4%C4%B6%AD%A1%C1pyenv%A4%C8virtualenv |
![]() |
ノート/ノート
訪問者数 4188 最終更新 2017-05-06 (土) 08:14:15
Python開発環境の大きな問題として、Python2とPython3のバージョンの違いがある。
おそらく本来ならPython3へ移行して終わり(ピリオド)だったのだろうが、Python2で開発されたコードがPython3で動かない(修正を要する)ことがあり、移行は中途半端である。 つまり、Python2で書かれたプログラムを持ち込んで使う・改造する場合、Python2の環境が必要になる。一方で一部のソフトやライブラリはPython3のみに対応するので、Python3の環境が必要になる。
というわけで、Python2と3の両方の環境を(プロジェクトごとに)使い分けることになる。これはかなり厄介な作業になる。
これに加えて、Pythonの場合には(他の言語でも同様とは思うが)ライブラリをインストールした環境でプログラムを実行することになるが、ライブラリのコンフリクトが起こり得ること、同じような機能のライブラリが複数ああってしかし微妙に機能が違うために使い分けたいことがあること、などの理由から、プロジェクトごとに導入するライブラリセットを変えた環境が欲しくなる。
というわけで、
と思えばいいらしい。
以下、参照したページ
それぞれの元は、
Simple Python version management
Virtualenv — virtualenv 15.0.2 documentation
Centos7
Centos7へインストールする参考ページは、たとえば
Ubuntuへインストールする参考ページは、たとえば
まず、必要なライブラリをインストール。Centos7ではこんな感じらしい。
sudo yum install zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel
Ubuntuではこんな感じ。
sudo apt-get install git gcc g++ make openssl libssl-dev libbz2-dev libreadline-dev libsqlite3-dev
次に、pyenvをインストール
pyenv自体をgit cloneで持ってくる。ここからは両linuxとも共通(当然)、ここから一般ユーザ権限で。
git clone https://github.com/yyuu/pyenv.git ~/.pyenv echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile echo 'eval "$(pyenv init -)"' >> ~/.bash_profile source ~/.bash_profile exec $SHELL -l
pipでインストールできる。pipがあるという前提で、
pip install pyenv
一応、確認のため、pyenvの下でどんな環境がインストール可能かリストコマンドで見てみる
pyenv install -l
次に、virtualenvをインストール (単独でvirtualenvを使うときのため)
virtualenv自体を、git cloneで持ってくる。
git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile exec $SHELL -l
pipでインストールできる。pipがあるという前提で、
pip install virtualenv
pyenv下に使いたいpythonのバージョンをインストール、またはanacondaのバージョンをインストール
pyenv install 2.7.12 ← pythonをインストールするときはバージョン番号だけ pyenv install 3.5.2
インストールできるバージョン番号は、
pyenv install -l
で確認。また、
pyenv versions
で手元マシンにあるpyenvの名前(pythonバージョン番号もしくは自分で付けた環境名)確認。
たとえば、python3.6.0a1やanaconda2-4.1.0を準備したければ
pyenv install 3.6.0a1 pyenv install anaconda2-4.1.0
などとしてインストールする。
で、インストールしたら最後に、
pyenv rehash
をしておくとよい
pyenvのみを使っていて、pythonのデフォルトで使えるバージョンを切り替えたいときのコマンドは
pyenv global 2.7.12
もともとシステムに入っているpythonを使いたいときは
pyenv global system
現在ディレクトリ下での環境として設定したければ
pyenv local 2.7.12
いろいろできるようだが、プロジェクトとディレクトリを対応させて、そのディレクトリごとに異なる環境を割り当てる方法が、使いやすいようだ。
pyenv-virtualenvをインストールする
pip install pyenv-virtualenv
まず、pyenvで、新しい環境名を作る
pyenv virtualenv anaconda3-4.1.0 my-env
プロジェクトに対応したディレクトリを作る
mkdir my-env cd my-env
ここで使いたい環境名をlocalとして設定する
pyenv local my-env
更に、この環境内で使いたいpythonのライブラリを、pipコマンドでインストールすることができる。
仮想環境を削除するには
pyenv uninstall my-env
仮想環境を表示するには
pyenv versions pyenv virtualenvs
pythonのインタラクティブ実行環境としてipythonがあるが、更にそれをブラウザ上で実行できるようにするツールが、Jupyter(旧称Notebook)と思ってよいらしい。
参考にしたページ
いいところは、ブラウザ上なので、リモートからの使い勝手が良いことである。
一方で、Python実行ホスト側にJupyterのWebサーバー(JupyterがWebサーバーそのものとして動くと思えばいい)を置くので、80番とは異なるポート(たとえば8080番)でサーバーをアクセスできるように設定しなければならない。ファイヤウォール等が間に入っていると、そこを回避する手段(VPNなど)を設定しなければならない点が、面倒といえば面倒である。
研究室環境では、Pythonを使いたいlinuxサーバー自身がファイヤウォールを持っているのでそれを出られるようにする必要がある。それに加えて、大学の出口でファイヤウォールによってポート規制がかかっているので、たとえばSSHのポートフォワードを使ったVPN設定が必要になる。
jupyterのインストールは、pipコマンドで容易に行える(かなりいろいろなdependencyをインストールするが)。
pip install jupyter
SSH経由のVPNの設定は、TeraTermの場合は次のようにする。
まずTeraTermでセッションを開いてしまう。
設定タブでSSH転送を選び、ポート転送に対して「追加」で、
ローカルのポート指定の側で、ローカルのポート8888、リモート側ホスト、(リモート)ポート8888を指定する。
このセッションが生きている間、ポート転送する。
また、ブラウザからログインするための設定が必要で、たとえば
ipython notebook(jupyter)をリモートから使う
を参照。具体的には
jupyter notebook --generate-configこれで、configファイル ~/.jupyter/jupyter_notebook_config.py ができる。次に
c.IPKernelApp.pylab = 'inline' c.NotebookApp.ip = '*' c.NotebookApp.open_browser = False c.NotebookApp.port = 8888 c.NotebookApp.password = u'sha1:XXXXXXX(#パスワードのハッシュ値を記載)'但し、パスワードのハッシュ値は、たとえばpythonを使って
from IPython.lib import passwd passwd()を実行すれば、sha1:XXXXXXX が生成される。
画面をpdfに書き出すために、pandoc というパッケージが必要らしい。 Ubuntuの場合は ダウンロードのページ から pandoc-1.xxxx.deb をダウンロードし、サーバー上で
dpkg -i pandoc-1.17.2-1-amd64.deb
のようにしてインストールする。CentosとかRPMベースのインストールには alien コマンドを使えと書いてある。
さらに、pdflatexがない、と怒ったので、
apt-get install texlive-latex-base
としてインストールする。Centos上ではどうするか未確認。
これでも、pdfプリントはダメ。フォントが無いらしい。
ここまでできている環境で、起動は、
jupyter notebook &
その上で、手元Windows上のブラウザ上で、URL = http://localhost:8888 を開く。 うまくいけば、Jupyterの画面が開く。
終了時にセーブされた ***.ipynb ファイルを、次回開始時に開くと、終了時の状況から再開できる。
マークダウンの説明
文法の要約
メモを書く・プレゼンを作る
インストールはyumでOK.
theanoを含むpythonを実行しようとしたら、エラーが出た。(theanoはpipでインストール成功済み)
Problem occurred during compilation with the command line below: /usr/bin/g++ -shared -g -march=core-avx2 -mcx16 -msahf -mmovbe -mno-aes -mpclmul -mpopcnt -mabm -mno-lwp -mfma -mno-fma4 -mno-xop -mbmi -mbmi2 -mno-tbm -mavx -mavx2 -msse4.2 -msse4.1 -mlzcnt -mno-rtm -mno-hle -mrdrnd -mf16c -mfsgsbase -mno-rdseed -mno-prfchw -mno-adx -mfxsr -mxsave -mxsaveopt -mno-pku --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=46080 -mtune=generic -DNPY_NO_DEPRECATED_API=NPY_1_7_API_VERSION -m64 -fPIC -I/home/yamanouc/.pyenv/versions/testchainer/lib/python3.5/site-packages/numpy/core/include -I/home/yamanouc/.pyenv/versions/3.5.1/include/python3.5m -I/home/yamanouc/.pyenv/versions/testchainer/lib/python3.5/site-packages/theano/gof -L/home/yamanouc/.pyenv/versions/3.5.1/lib -fvisibility=hidden -o /home/yamanouc/.theano/compiledir_Linux-3.10-el7.x86_64-x86_64-with-centos-7.3.1611-Core-x86_64-3.5.1-64/lazylinker_ext/lazylinker_ext.so /home/yamanouc/.theano/compiledir_Linux-3.10-el7.x86_64-x86_64-with-centos-7.3.1611-Core-x86_64-3.5.1-64/lazylinker_ext/mod.cpp -lpython3.5m /usr/bin/ld: /home/yamanouc/.pyenv/versions/3.5.1/lib/libpython3.5m.a(abstract.o): 再配置 R_X86_64_32S (`_Py_NotImplementedStruct' に対する) は共有オブジェクト 作成時には使用できません。-fPIC を付けて再コンパイルしてください。 /home/yamanouc/.pyenv/versions/3.5.1/lib/libpython3.5m.a: error adding symbols: 不正な値です collect2: エラー: ld はステータス 1 で終了しました
これに対して、TheanoをpyenvでインストールしたPython3.4.2で動かそうとしたら「PICオプションつけて再コンパイルしろよ」と怒られた時にやった対処メモ を試してみる。
env PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install 3.5.1 pyenv: /home/yamanouc/.pyenv/versions/3.5.1 already exists continue with installation? (y/N) y Installing Python-3.5.1... Installed Python-3.5.1 to /home/yamanouc/.pyenv/versions/3.5.1
これでよかったみたい。