LoginSignup
33
30

More than 5 years have passed since last update.

pythonバージョン管理システムがよくわからない人のための環境構築手順

Last updated at Posted at 2016-12-11

環境

  • macOS Sierra version 10.12.1
  • Python 2.7.10

前提

  • homebrewがインストールされていること

pyenvとvirtualenvとpyenv-virtualenv

pythonの環境を整えるに当たって、pythonのバージョン管理について調べていたのですが、virtualenvとpyenv-virtualenvでだいぶ混乱していました。

そんな時に見つけたのがこの記事です。大変わかりやすくスッキリしました。

自分でもまとめてみます。

pyenv-virtualenvとvirtualenvは別物であり、組み合わせは次の2通りが考えられる。

  • pyenv + pyenv-virtualenv
  • pyenv + virtualenv

例えばprojectA,projectB,projectCで別々のpython環境を使いたい時に、pyenv-virtualenvを使った場合は環境が3つともHOMEディレクトリに作られ、それを各々のプロジェクトから参照する。virtualenvを使った場合は、python環境は各プロジェクト内に作られる。という事だと思う。

virtualenvはプロジェクトのディレクトリで完結していて良いが、毎度環境をactiveにしないといけないのが面倒。
pyenv-virtualenvはプロジェクトディレクトリに入ったら自動的に環境が適用されるから楽だけど、環境がHOMEディレクトリ配下に作られるのがちょっと気持ち悪い。だって別のプロジェクトから同じ環境を使いたいことってあんまりないでしょ。

というわけで、pyenv + virtualenvを使うことにした。

pyenv

pyenvのインストール

homebrewでpyenvをインストールします。

$ brew install pyenv

.bash_profileなどに次の設定を追加します。

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

別バージョンのインストール

pythonの最新バージョンをインストールしてみます。

pyenv install -lでインストール可能なバージョンの一覧を確認できます。2系と3系の最新バージョンをインストールしてみます。

$ pyenv versions
* system (set by /Users/clutter/.pyenv/version)
$ pyenv install -l
$ pyenv install 2.7.12
$ pyenv install 3.5.2
$ pyenv versions
* system (set by /Users/clutter/.pyenv/version)
  2.7.12
  3.5.2

2.7.123.5.2がインストールできました。

バージョンの切り替え

pyenvでバージョン切り替えてみます。

~$ pyenv version
system (set by /Users/clutter/.pyenv/version)
~$ python -V
Python 2.7.10

## globalバージョンの変更
~$ pyenv global 3.5.2
~$ pyenv version
3.5.2 (set by /Users/clutter/.pyenv/version)
~$ python -V
Python 3.5.2

## 特定ディレクトリでの変更
~$ mkdir pytest
~$ cd !$
pytest$ pyenv local 2.7.12
pytest$ pyenv version
2.7.12 (set by /Users/clutter/pytest/.python-version)
pytest$ python -V
Python 2.7.12
pytest$ cd ..
~$ pyenv version
3.5.2 (set by /Users/clutter/.pyenv/version)
~$ python -V
Python 3.5.2

homeディレクトリとpytestディレクトリでバージョンが切り替わっていることが確認できます。
localのバージョンは、そのディレクトリに作成される.python-versionに記録されているようです。

pytest$ ls -a
.               ..              .python-version
pytest$ cat .python-version
2.7.12

virtualenv

virtualenvのインストール

pyenvでインストールしたバージョンに切り替えるとpipが使えるのでそれでインストールします。

$ pip install virtualenv

仮想環境の作成

仮想環境を作成して、Flaskをインストールしてみます。

$ pip list
pip (8.1.1)
setuptools (20.10.1)
virtualenv (15.1.0)

# 新しい仮想環境venvtestを作成
$ virtualenv venvtest
New python executable in /Users/clutter/venvtest/bin/python2.7
Also creating executable in /Users/clutter/venvtest/bin/python
Installing setuptools, pip, wheel...done.
$ ls
venvtest
$ cd venvtest

# 仮想環境を有効にする
$ source bin/activate
# 仮想環境でパッケージをインストール
(venvtest) $ pip install Flask
(venvtest) $ pip list
click (6.6)
Flask (0.11.1)
itsdangerous (0.24)
Jinja2 (2.8)
MarkupSafe (0.23)
pip (9.0.1)
setuptools (30.4.0)
Werkzeug (0.11.11)
wheel (0.29.0)

# 仮想環境を抜ける
(venvtest) $ deactivate
$ pip list
pip (8.1.1)
setuptools (20.10.1)
virtualenv (15.1.0)

仮想環境を抜けるとFlaskがインストールされていない事が確認できます。
仮想環境を作る時に--no-site-packagesをつけると、globalにインストールされたパッケージを無視して綺麗な状態で環境を作ってくれるらしいのでこのオプションは覚えておいた方が良さそう。

pythonのバージョンを指定して環境を作る場合

--pythonオプションを指定して作成する

virtualenv venv --python=~/.pyenv/versions/3.5.2/bin/python3

--python=python3.5.2としても良いが、anacondaもインストールされているとどっちのpython3かわからないと言われる

うまくいかない時

この辺が原因かもしれない。

参考

33
30
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
33
30