Linuxでpyenvを利用してPythonをインストールする

この記事でやることです。

  • WSL2Ubuntuをインストール
  • pyenvをインストールして、Pythonのバージョン管理をする
  • venvで仮想環境を作成し、その仮想環境で使うPythonのバージョンを選択する

新たにPCを購入したので、Pythonの環境をどうしようかと考えていました。すると pyenv + venv でPythonを使うのが良さそうと思うようになりました。

以前は、Linux(WSL)ではなくWindows側でPythonを動かしていたので、Pythonの公式サイトからDLしたexeでインストールし、C:\Users\xxx\AppData\Local\Programs\Python 直下に複数のPythonのバージョンが入っている状態でした。

今回は、Linux(WSL)にpyenvをインストールし、pyenvにPythonのバージョン管理をしてもらおうと思います。Pythonの実行はLinuxで行います。

このサイトを参考にしました。
「Pythonの環境構築をマスターする(pyenv,venv)」
https://zenn.dev/tigrebiz/articles/2822fb4de256d8

ところで、LinuxにはPythonがプリインストールされています。UbuntuでPythonのVersionを見てみます。pyenvをインストールすると、このPythonはどのような位置づけになるのでしょうか。

$ python3 -V
Python 3.12.3

WSL2とLinux

まずは、LinuxをWindowsで動かせるようにします。WSL2とUbuntuを用意します。

Microsoft Storeからもインストールできますが、WSLの公式ドキュメントを見ながらインストールします。LinuxはUbuntuを選びました。

WSL公式ドキュメント 「WSL の基本的なコマンド」
https://learn.microsoft.com/ja-jp/windows/wsl/basic-commands

> wsl --list --verbose
  NAME      STATE           VERSION
* Ubuntu    Running         2
> wsl --status
既定のディストリビューション: Ubuntu
既定のバージョン: 2

pyenv

pyenvの公式ドキュメントに沿ってインストールを行います。

pyenvの公式ドキュメント
https://github.com/pyenv/pyenv?tab=readme-ov-file#simple-python-version-management-pyenv

A. Getting Pyenv

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

$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv

ドキュメントにコンパイルしてみろ。ということが書かれているのでコンパイルします。でも、GCCが見つかりませんエラーになりました。

$ cd ~/.pyenv && src/configure && make -C src
warning: gcc not found; using CC=cc
aborted: compiler not found: cc

そこで、Ubuntuのbuild-essentialパッケージをインストールします。

$ sudo apt install build-essential

GCCのバージョンを確認してみます。

$ gcc --version
gcc (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0

再度コンパイルしてみます。できたようです。

$ cd ~/.pyenv && src/configure && make -C src
make: Entering directory '/home/xxx/.pyenv/src'
gcc -fPIC     -c -o realpath.o realpath.c
gcc -shared -Wl,-soname,../libexec/pyenv-realpath.dylib  -o ../libexec/pyenv-realpath.dylib realpath.o
make: Leaving directory '/home/xxx/.pyenv/src'

B. Set up your shell environment for Pyenv

pyenvのインストールが完了したのでセットアップします。公式ドキュメントのコードをコピーして、実行していきます。

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo '[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init - bash)"' >> ~/.bashrc

$HOME/.bashrcに設定が書き込まれています。見てみましょう。

$ vi ~/.bashrc

残りの2つも実行します。

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.profile
echo '[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.profile
echo 'eval "$(pyenv init - bash)"' >> ~/.profile
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
echo '[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(pyenv init - bash)"' >> ~/.bash_profile

C. Restart your shell

PATHの変更を有効にします。

$ exec "$SHELL"

D. Install Python build dependencies

新しいバージョンのPythonをインストールする前にPythonのビルド依存関係をインストールします。

Ubuntuのところに書かれているコードを実行します。
https://github.com/pyenv/pyenv/wiki#suggested-build-environment

$ sudo apt update; sudo apt install make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev curl git \
libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev

ここでpyenvのバージョンを確認してみます。2.6.5でした。

$ pyenv --version
pyenv 2.6.5

pyenvを使ってPythonをインストール

複数のPythonをインストールする

Pythonをインストールします。Pythonのバージョンは 3.13.5 にします。
https://www.python.org/downloads/

$ pyenv install 3.13.5

Python 3.9.23 もインストールしてみます。

$ pyenv install 3.9.23

Pythonのバージョンを見る

$ pyenv versions
* system (set by /home/xxx/.pyenv/version)
  3.9.23
  3.13.5

pyenv versions コマンドを打つと、systemのところにアスタリスクが付いています。

これはLinuxにプリインストールされていたPythonです。python –version コマンドを打つと、プリインストールされたPythonのバージョンが表示されます。

$ python3 --version
Python 3.12.3

Pythonのバージョンを切り替える

python global <version> でバージョンを切り替えられます(アスタリスクの位置が変わります)。

$ pyenv global 3.13.5

$ pyenv versions
  system
  3.9.23
* 3.13.5 (set by /home/xxx/.pyenv/version)

$ python --version
Python 3.13.5

venvで仮想環境を作り、Pythonのバージョンを選択する

以下をやります。

  • HOME直下にPython用のワーキングディレクトリを作成する
  • ワーキングディレクトリ内にPythonのバージョンごとのディレクトリを作成する
  • それぞれのディレクトリで使用するPythonのバージョンを選択する

まずは、HOMEへ移動します。仮想環境のディレクトリを複数作るので、そのディレクトリをまとめるワーキングディレクトリ project_python を作成し、そこへ移動します。

$ cd ~

$ mkdir project_python

$ cd project_python

おさらいで pyenv でインストール済みのPythonのバージョンの一覧です。

$ pyenv versions
  system
  3.9.23
* 3.13.5 (set by /home/xxx/.pyenv/version)

ここから、異なるPythonのバージョンの複数の仮想環境を作成してみます。

先に Python 3.9 の仮想環境を作成します。

カレントディレクトリのPythonのバージョンを3.9にする。
~/project_python$ pyenv local 3.9.23

仮想環境を作成する。
~/project_python$ python -m venv venv_py39

仮想環境を有効化する。
~/project_python$ source venv_py39/bin/activate

仮想環境のPythonのバージョンを確認する。
(venv_py39) ~/project_python$ python -V
Python 3.9.23

仮想環境を無効化する。
(venv_py39) ~/project_python$ deactivate

次に Python 3.13 の仮想環境を作成します。

カレントディレクトリのPythonのバージョンを3.13にする。
~/project_python$ pyenv local 3.13.5

仮想環境を作成する。
~/project_python$ python -m venv venv_py313

仮想環境を有効化する。
~/project_python$ source venv_py313/bin/activate

仮想環境のPythonのバージョンを確認する。
(venv_py313) ~/project_python$ python -V
Python 3.13.5

仮想環境を無効化する。
(venv_py313) ~/project_python$ deactivate

これで複数の仮想環境ができたので Python 3.9 の仮想環境を有効化し、Versionを確認してみます。Python 3.9Python 3.13 の仮想環境の作成を確認できました。

再度、Python 3.9の仮想環境を有効化する。
~/project_python$ source venv_py39/bin/activate

仮想環境のPythonのバージョンを確認する。
(venv_py39) ~/project_python$ python -V
Python 3.9.23

仮想環境を無効化する。
(venv_py39) ~/project_python$ deactivate

以上です。