この記事でやることです。
- WSL2とUbuntuをインストール
- 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.9 と Python 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
以上です。