Python は 2.7.12 を常用しているけど、Python3 系に対応する必要があったので、これを機会にやってみることにした。まあ、今時 Python2 系だけってものなんだと思うので、ちょうどいいといえばそのとおりではある。
で、複数のバージョンを共存させるには pyenv を使うのがいいらしい。virtualenv については、以前エントリを書いたこともあるけど、pyenv と合わせて使うには pyenv のプラグインである pyenv-virtualenv を使うといいらしいので、そうすることにする。
環境
- Ubuntu 16.04 LTS
- システムの Python : 2.7.12
インストール
pyenv のインストール。インストールというか github からクローンする。システムにインストールする方法と、ユーザーディレクトリにインストールする方法があるようだけど、今回は後者にした。
takatoh@envelopes $ git clone https://github.com/yyuu/pyenv.git ~/.pyenv
pyenv-virtualenv のインストール
takatoh@envelopes $ git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
.bachrcに設定を書き加える
以下を追記
export PYENV_ROOT=$HOME/.pyenv export PATH=$PYENV_ROOT/bin:$PATH eval "$(pyenv init -)" eval "$(pyenv virtualenv-init -)"
書いたらいったん端末を起動し直す。
Pythonのインストール
特定のバージョンをインストールするには pyenv install
コマンド。-l
オプションをつけると、インストール可能なバージョンの一覧が見られる。すげーいっぱい出てくるけど、今回は 3.6.3 をインストールしてみた。
takatoh@envelopes $ pyenv install 3.6.3 Downloading Python-3.6.3.tar.xz... -> https://www.python.org/ftp/python/3.6.3/Python-3.6.3.tar.xz Installing Python-3.6.3... WARNING: The Python bz2 extension was not compiled. Missing the bzip2 lib? WARNING: The Python readline extension was not compiled. Missing the GNU readline lib? Installed Python-3.6.3 to /home/takatoh/.pyenv/versions/3.6.3
おっと、なんか WARNING がでたな。コンパイルするときにライブラリが足りないようだ。
takatoh@envelopes $ sudo apt install libbz2-dev libreadline6-dev
インストールした 3.6.3 をいったんアンインストールしてやり直し。
takatoh@envelopes $ pyenv uninstall 3.6.3 pyenv: remove /home/takatoh/.pyenv/versions/3.6.3? Y takatoh@envelopes $ pyenv install 3.6.3 Downloading Python-3.6.3.tar.xz... -> https://www.python.org/ftp/python/3.6.3/Python-3.6.3.tar.xz Installing Python-3.6.3... Installed Python-3.6.3 to /home/takatoh/.pyenv/versions/3.6.3
今度はうまくいった。
インストールしたバージョンは pyenv versions
コマンドで見られる。
takatoh@envelopes $ pyenv versions * system (set by /home/takatoh/.pyenv/version) 3.6.3
* がついてるのがアクティブなバージョンだ。
バージョンの切り替え
上に書いたように、現状ではシステムにインストールされている Python が使われている。これを切り替えるには、pyenv global
または pyenv local
コマンドを使う。global
は全体に、local
はカレントディレクトリに適用される。
takatoh@envelopes $ pyenv local 3.6.3 takatoh@envelopes $ pyenv versions system * 3.6.3 (set by /home/takatoh/.python-version) takatoh@envelopes $ python -V Python 3.6.3
つぎの作業に入る前にいったんシステムのバージョンに戻しておく。
virtualenvで新しい環境を作る
pyenv virtualenv [version] <virtualenv-name>
とすることで新しい環境を作れる。
takatoh@envelopes $ pyenv virtualenv 3.6.3 brs-3.6.3 Requirement already satisfied: setuptools in /home/takatoh/.pyenv/versions/3.6.3/envs/brs-3.6.3/lib/python3.6/site-packages Requirement already satisfied: pip in /home/takatoh/.pyenv/versions/3.6.3/envs/brs-3.6.3/lib/python3.6/site-packages takatoh@envelopes $ pyenv local brs-3.6.3 (brs-3.6.3) takatoh@envelopes $
プロンプトのカッコ内に環境名が表示されている。この環境は保存されていて、以後、このディレクトリに戻ってくるたびに自動的に適用される。
(brs-3.6.3) takatoh@envelopes $ cd .. takatoh@envelopes $ pyenv versions * system (set by /home/takatoh/.python-version) 3.6.3 3.6.3/envs/brs-3.6.3 brs-3.6.3 takatoh@envelopes $ cd brs (brs-3.6.3) takatoh@envelopes $ pyenv versions system 3.6.3 3.6.3/envs/brs-3.6.3 * brs-3.6.3 (set by /home/takatoh/w/brs/.python-version) (brs-3.6.3) takatoh@envelopes $
パッケージのインストール
通常通り pip
コマンドを使う。
(brs-3.6.3) takatoh@envelopes $ pip list --format=columns Package Version ---------- ------- pip 9.0.1 setuptools 28.8.0 (brs-3.6.3) takatoh@envelopes $ pip install click Collecting click Using cached click-6.7-py2.py3-none-any.whl Installing collected packages: click Successfully installed click-6.7 (brs-3.6.3) takatoh@envelopes $ pip list --format=columns Package Version ---------- ------- click 6.7 pip 9.0.1 setuptools 28.8.0
とりあえずこんなもんかな。