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
とりあえずこんなもんかな。