自分の環境を構築する方法のメモ

リモートで作業する時に必要になったのでメモる
参考にしたサイトの方がわかりやすい可能性あり
環境は、mac OSX: Yosemite です。

pyenv

pyenvはpython環境を管理するものです。
標準とは違う環境のpython環境を作成できます。

.bash_profileあたり、よく理解してないのでいらないものが混じってるかもしれないです。

参考URL:
pyenvおよびvirtualenvの使い方
pyenvでPython環境を管理する方法
pyenvとvirtualenvを使ってみる

pyenvを使えるようにする

まず、git cloneする
$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv

そして、下記のものを~/.bash_profileに書き込む。(.bashrc, zshrcとかでもよい?)

export PYENV_ROOT=$HOME/.pyenv
export PATH=$PYENV_ROOT/bin:$PATH
eval "$(pyenv init -)"

それぞれのバージョンのpythonのインストール

pyenv install 3.5.0でインストールできます。バージョンは任意となります。

install-version.
$ pyenv install 3.5.0
$ pyenv install 2.7.9

間違えた時のアンインストール方法は、installuninstallに変えて実行。

pythonのバージョンの切り替え

pyenv global x.x.xまたは、pyenv local x.x.xでバージョンの切り替えができます。
globalとすると全体に、localにするとそのカレントディレクトリに反映されます。この反映はterminalを終了しても続くので、localでフォルダごとに設定するととても便利です。

そのシェルでの変更は、shellとすると、変更できます。これを使用した場合、今使用してるシェルでしかその環境が反映されません。なので、シェルを閉じた時後に再度開いた場合やシェルを複数開いた場合は、その環境変更は他に影響されることはありません。

一時的に使う場合はshell、フォルダごとに設定したい場合はlocal、全体のデフォルトの環境を変えたい場合はglobalといったところでしょうか。

x.x.xの部分をsystemとすることで元に戻せます。

swich-python-version.
python --version
Python 2.7.3

$ pyenv shell 2.7.9
$ python --version
Python 2.7.9

$ pyenv shell 3.5.0
$ python --version
Python 3.5.0

$ pyenv shell system
$ python --version
Python 2.7.3

moduleのインストール

インストールしたpython(2.7.9と3.5.0)には、デフォルトのモジュールしか入ってない(pip freezeしても何も入ってない)のでインストールします。
モジュールを入れるのは、通常通りpip installで任意のモジュールを入れるだけです。

pip install xxxxx

virtualenv

pyenvだけでも、十分便利だけど、もっと便利に。
virtualenvは、同じ(python)バージョンで違う環境を作成するためのもの

インストール方法

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

そして、設定を.bash_profileに書き込む

eval "$(pyenv virtualenv-init -)"

新しい環境の作成

新しいpython環境の作成は、pyenv virtualenv [version] <virtualenv-name>とすることで新しくvirtualenv-nameという環境ができる。ここの[version]には、既存の環境を指定する。

make_new.
pyenv virtualenv 3.5.0 new_3.5.0

ここで、新しく作った環境では、pyenvで作った環境の中でpip等でインストールしたモジュールは使えなくなっている。
[version]で使ってたものを使いたければ、--system-site-packageというオプションをつける。
そうすると、pyenvで構築したもののsite-packagesにパスを通します。

下記の例でいうと、--system--site-packagesをつけると、~/.pyenv/versions/3.5.0/lib/python3.5/site-packagesがパスに加わるということです。

sample_site-packages.
$ pyenv virtualenv 3.5.0 inde-3.5.0
$ pyenv virtualenv --system-site-packages 3.5.0 co-3.5.0
$ pyenv virtualenv --system-site-packages inde-3.5.0 co-inde-3.5.0

# sys.path一部省略しています。
$ python -c 'import sys; print(sys.path)'    # ここは、3.5.0
['', '~/.pyenv/versions/3.5.0/lib/python35.zip',..., '~/.pyenv/versions/3.5.0/lib/python3.5/site-packages']

(inde-3.5.0) $ python -c 'import sys; print(sys.path)'
['', '~/.pyenv/versions/3.5.0/lib/python35.zip', .... , '~/.pyenv/versions/inde-3.5.0/lib/python3.5/site-packages']

(co-3.5.0) $ python -c 'import sys; print(sys.path)'
['', '~/.pyenv/versions/3.5.0/lib/python35.zip', ... , '~/.pyenv/versions/co-3.5.0/lib/python3.5/site-packages', '~/.pyenv/versions/3.5.0/lib/python3.5/site-packages']

(co-inde-3.5.0)kodaira@fomalhaut:~$ python -c 'import sys; print(sys.path)'
['', '~/.pyenv/versions/co-inde-3.5.0/lib/python35.zip',  ... , '~/.pyenv/versions/co-inde-3.5.0/lib/python3.5/site-packages', '~/.pyenv/versions/3.5.0/lib/python3.5/site-packages']

他の環境のmoduleをインストールしたい時は、pip freezeをどっかに書き込んで、pip install -rでインストールできます。(virtualenvする時にコピーする方法ありそうだったけど見つからなかったので誰か。。。)

pip_install.
---コピーしたい環境で----
$ pip freeze > pyp_list.txt
---環境変更後----
$ pip install -r pyp_list.txt

virtualenv環境の保存と再構築

ここが、一番virtualenvを使う利点だと思います。
環境を保存して、他の場所で同じ環境を再現する話です。

まず、必要なもの(wheel)をインストール

install_wheel.
$ pyenv exec pip install wheel

wheelを使ってpipでインストールしたモジュールの情報を保存

--wheel-dir=[dir]で任意のディレクトリに保存
上で、pip freezeの出力をそのまま使いましたが、wheelを使った方がいいらしいです。

save_module_info.
$ pyenv exec pip freeze > pyp_list.txt
$ pyenv exec pip wheel --wheel-dir=~/tmp/wheelhouse -r pyp_list.txt

新しい、環境を作ったところでさっき作ったwheel使って同じものをインストール

wheelすることで、ビルド済みのパッケージを保存できるので、毎回コンパイルせずに済む。
参考URL:そこはかとなく書くよん。

install_using_wheel.
$ pyenv virtualenv 3.5.0 tes-3.5
$ pyenv global tes-3.5
$ pip install -r pyp_list.txt --use-wheel --no-index --find-links=tmp/wheelhouse
$ pip freeze

まとめ

pyenvvirtualenvを使うことによって環境を構築できる。
'wheel'で環境を保存でき、他の場所で同じ環境を再現できる。

間違ってるあるとか、もっと便利なのあるとかあったら教えてください

::...
免责声明:
当前网页内容, 由 大妈 ZoomQuiet 使用工具: ScrapBook :: Firefox Extension 人工从互联网中收集并分享;
内容版权归原作者所有;
本人对内容的有效性/合法性不承担任何强制性责任.
若有不妥, 欢迎评注提醒:

或是邮件反馈可也:
askdama[AT]googlegroups.com


订阅 substack 体验古早写作:


点击注册~> 获得 100$ 体验券: DigitalOcean Referral Badge

关注公众号, 持续获得相关各种嗯哼:
zoomquiet


自怼圈/年度番新

DU22.4
关于 ~ DebugUself with DAMA ;-)
粤ICP备18025058号-1
公安备案号: 44049002000656 ...::