python: pyenvを導入して特定のバージョンのPythonを動かせるようにする for Ubuntu
この記事について
本記事では、マシン上で任意のバージョンが実行できるようになる pyenv
のインストールから簡易的な利用方法まで記載していきます。
Pythonに限らず、プログラミング言語はバージョンに依存して新機能が導入されたり、 特定の機能が廃止方向に進んでwarningが表示されるようになってしまったり、といった事象がつきもの。そこで、どんな環境でも特定のバージョンでプログラムを動かすようにできれば、こういった悩みから解放されるはず。
こういった機能は「仮想環境 (virtual environment)」と呼ばれる機能で提供されることが多いです。仮想環境自体は実行環境のバージョンや付随するもろもろのライブラリのバージョンまでまとめて管理するものを指しますが、ここではその実行環境のバージョンを固定する方法を解説しています。
Ubuntu 20.04 で確認。
pyenv
は Rubyで同様のことを実施できる rbenv
からのforkで作成されたようです。
関連記事: rbenvのインストール方法
pyenv
導入方法
ダウンロード
公式リポジトリに書いてある通りに実施すればOK。かいつまんで書くと、
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
# 以下はBash向け拡張機能のコンパイルなので必須ではない。
cd ~/.pyenv && src/configure && make -C src
上記で pyenv
のダウンロードと配置、およびbash向け拡張機能のコンパイルが完了。
PATH
設定
続いて、 pyenv
が使えるように PATH
を通してあげます。 echo
コマンドの内容を指定したファイルにリダイレクトする形で書き込みます。
※ bash 以外を利用されている場合は公式リポジトリ参照。
# ~/.bashrc に設定を書き込み
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
# 同じことを ~/.bash_profile にも書くのが確実、とのことなので
# 同様のことを実施
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
rbenv
では GUIを使っているか否かで .bashrc
に書くのか bash_profile
に書くのかが決定されていたのですが、ここでは両方に書くのがおすすめされています。なのでしたがっておきます。
注意事項
公式手順通りに、上記の通り ~/.bash_profile
に書き込んでみたのだが、SSH接続した際にターミナルに色がつかなくなってしまった。
調べてみたところ、Ubuntuは .bash_profile
の代わりに .profile
を準備しており、そちらを読むようになっているのだが、 .bash_profile
を自力で作成してしまうとそちらを読むようになってしまい、起動時に .bashrc
を読む動作がスキップされてしまうようだ。
そのため、私は実際には .profile
の中に上記のコマンドを記述した。
シェルの再起動
シェルを再起動することで上記の設定を反映させます。
再起動が面倒な場合はシェルを以下コマンドで立ち上げるなどで対応は可能。
exec "$SHELL"
確認
インストールが完了したか確認してみます。
pyenv -v
成功すると以下のようにバージョンが表示されます。
pyenv 2.3.3
pyenv
を利用して python
のインストール
pyenv
を利用して python
をインストールしてみましょう。
事前準備
Ubuntu 20.04 ではおそらく以下のパッケージをインストールしておかなければ後のPythonインストール時に警告が出されます。
sudo apt install libbz2-dev libncurses-dev \
libffi-dev libreadline-dev liblzma-dev \
libz-dev libssl-dev
インストール可能なバージョンを表示する
インストール可能な python
のバージョンを表示するには以下。
pyenv install -l
インストール可能なバージョンがすべて出てきてしまうので、かなり長いです。
特別な理由がなければ 3.10.6
などの数字だけのものが Python の通常
バージョンなので、一番数値が大きいもの(最新のもの)を入れましょう。
pyenv
を利用して python
をインストール
pyenv install <version>
という形式です。
pyenv install 3.10.6
ソースをダウンロードしてコンパイル実行するためなかなか時間がかかります。
インストール済で 利用可能な python
バージョンを一覧表示
インストールが完了したら、念のため確認。
pyenv versions
こんなのが出ます。*
がついているものが現在システムでデフォルトとなっている python
バージョンです。この場合 Ubuntu にデフォルトで入っているものがデフォルトになっています。
* system (set by /home/ubuntu/.pyenv/version)
3.10.6
pyenv
で現在のログインユーザが使うデフォルト python
のバージョンを指定する
せっかくなので、インストールしたバージョンをデフォルトで利用するように変更します。 pyenv global
コマンドを利用します。
pyenv global 3.10.6
pyenv
で特定のディレクトリでのみデフォルト python
のバージョンを指定する
pyenv local <version>
の形式で、実行したディレクトリ以下でのpythonバージョンを固定します。
pyenv local 3.10.6
pyenv
を利用してインストールした python
をアンインストール
pyenv uninstall <version>
という形式です。
pyenv uninstall 3.10.6
おわりに
pyenv
はPython実行環境のバージョンを固定するもので、これだけでも非常に有用な代物ですが、これに加えて最初に記載したような仮想環境を提供するライブラリとして virtualenv
というものがあります。これを利用すると実行環境 (Python本体) のみならず、関連する色々なライブラリ (pip install
で入れるもの) のバージョンまで固定できるため非常に便利です。
virtualenv については Raspberry Pi向けの記事ですが、内容には大きく相違ないはずですのでこちらをご覧ください: virtualenvwrapperの導入 for Rasbian
コメント
コメントを投稿