pythonの環境構築を失敗すると、バージョンに依存して使えないAPIがあったりして、色々困る。
これまでは頭を空っぽにして$ sudo apt install python3
とかやりまくってたけど、後々つらいことが色々あった。
今回はUbuntu18.04を対象に、pyenvを使って複数バージョンのpythonを管理する環境を構築する。
環境
Ubuntu18.04 Desktop
そもそもpyenvとは
上記githubページで開発されており、この中の説明の要点を日本語にする。
pyenvは、複数バージョンのpythonを簡単に切り替えて使えるようにする、シンプルなpythonバージョン管理ツールである。
pyenvは以下の操作を可能にする。
- pythonコマンドで呼び出されるpythonのバージョンをユーザ単位で変更
- プロジェクト単位でのpythonのバージョン管理の提供
- pythonのバージョンを環境変数での上書きを許可
- 瞬時的な複数バージョンのpythonのコマンド探索
要するに、python2系、3系を始め、複数のバージョンのpythonを1つのマシン上で利用できるようにするツールである。
どうやって動いているかなどの詳しい説明は、先程のgithubページにも書いてあるので、気になったら確認してみるとよい。
pyenvのインストール
githubにある公式のインストール方法に従ってインストールを試みる。
pyenvは、pyenvの安定版を自動でインストールためのリポジトリが用意されているので、基本的にはこれを用いる。
開発中の最新不安定版を使いたい場合は、別途gitブランチをフォークして自分でコンパイルする必要がある。
自動インストール
以下のリポジトリを用いる。
注意書きを読むと、2通りのやり方があるが、推奨されている方を用いた。
- 必要なパッケージのインストール
最初に、コンパイルに必要なライブラリとパッケージをインストールする。
$ sudo apt update $ sudo apt -y upgrade $ sudo apt -y install make build-essential libssl-dev zlib1g-dev libbz2-dev \ libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \ xz-utils tk-dev libffi-dev liblzma-dev
- インストール
github上のスクリプトをcurlでダウンロードし、実行する。
$ curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
ダウンロードが完了する。 ダウンロード中に環境変数やパスのwarningが出る。 ひとまず下記のコマンドでパスを通しておく。
$ export PATH="~/.pyenv/bin:$PATH"
これでとりあえずpyenvが使えるようになる。
- アップデート
まずはpyenvをアップデートする。
$ pyenv update
- 設定ファイルに追記する
各自の環境で用いているシェルの設定ファイル(.bashrc、.bash_profile、.zshrcなど)に、下記の3行を追記する。
export PATH="~/.pyenv/bin:$PATH" eval "$(pyenv init -)" eval "$(pyenv virtualenv-init -)"
最後にもう一度設定ファイルを読み込んでおく。
私の場合、zshを使うので、.zshrcに追記して、下記のコマンドを実行する。
$ source ~/.zshrc
使ってみる
- pyenvのバージョン確認
$ pyenv -v pyenv 1.2.7
- インストール可能なpythonのバージョン一覧確認
$ pyenv install --list Available versions: 2.1.3 2.2.3 2.3.7 . . .
- バージョンを指定してpythonをインストール
上記のバージョン一覧確認で表示されたものをそのまま入力してインストールする。
例では、python3.6.7をインストールしてみる。
$ pyenv install 3.6.7
- インストール済みのバージョン一覧の確認
$ pyenv versions
- pythonのバージョンをグローバルで切り替える
グローバルに設定、というのはシステム全体でpythonコマンドで呼び出されるバージョンを設定するということである。
まず最初に別のバージョンをインストールしておく。
今回は、2.7.13をインストールする。
$ pyenv install 2.7.13 $ pyenv versions 2.7.13 3.6.7
切り替える。
$ pyenv global 3.6.7 $ pyenv versions 2.7.13 * 3.6.7 (set by /home/kome/.pyenv/version) $ python --version Python 3.6.7 $ pyenv global 2.7.13 $ pyenv versions * 2.7.13 (set by /home/kome/.pyenv/version) 3.6.7 $ python --version Python 2.7.13
*
が先頭についているバージョンが、現在グローバルに設定されているバージョンである。- 特定のディレクトリ内でのバージョンを指定する
globalに対して、localコマンドを指定する。
localコマンドを実行すると、そのカレントディレクトリ内に.python-versionというファイルが生成される。これは、globalの設定より優先される。
$ mkdir ~/test && cd ~/test $ pyenv local 3.6.7 $ python --version Python 3.6.7 $ cd .. $ python --version Python 2.7.13
- 特定バージョンのアンインストール
$ pyenv uninstall <Version>
まとめ
複数バージョンのpythonを共存させることに成功した。最近では2系のコードは少なくなってきているのであまり使わないかもしれないが、多くのバージョンで共存をさせようとしたときに、きっと必要になる機能である。
参考にしたサイト