Python

【Python】【Windows】pyenvでPythonのバージョンを管理する

Pythonのバージョン管理を行うpyenvというツールがMac向けにあるが、Windows用もあるので、pyenvでPythonのバージョンを管理する方法を説明する。

複数の仕事やプロジェクトなどでPythonのバージョン管理をする必要がある場合に重宝する。

それにしても、ここ2年ぐらいで、随分とWindowsでの開発がしやすくなった気がする。

Macでのpyenvインストール方法はこちら。

インストール方法はMacとWindowsで異なるが、インストール後にpyenvコマンドの使い方は、どちらもほぼ同じ。

pyenv-winのインストール

github.com/pyenv-win

pyenv-winのgithubに色々なインストール方法が記載されているが、PowerShellからのインストールが一番簡単だと思われる。

以下のコマンドをPowerShellにコピペして実行する。

Invoke-WebRequest -UseBasicParsing -Uri "https://raw.githubusercontent.com/pyenv-win/pyenv-win/master/pyenv-win/install-pyenv-win.ps1" -OutFile "./install-pyenv-win.ps1"; &"./install-pyenv-win.ps1"
【出力例】
    ディレクトリ: C:\Users\UserName 
Mode                 LastWriteTime         Length Name                                                                                       
----                 -------------         ------ ----                                                                                       
d-----        2022/05/26      9:48                .pyenv                                                                                     
pyenv-win is successfully installed. You may need to close and reopen your terminal before using it.

環境変数へパスを追加

github.com/pyenv-win/add-system-settings

この操作も引き続きPowerShellで行う。

[System.Environment]::SetEnvironmentVariable('PYENV',$env:USERPROFILE + "\.pyenv\pyenv-win\","User")

[System.Environment]::SetEnvironmentVariable('PYENV_ROOT',$env:USERPROFILE + "\.pyenv\pyenv-win\","User")

[System.Environment]::SetEnvironmentVariable('PYENV_HOME',$env:USERPROFILE + "\.pyenv\pyenv-win\","User")
[System.Environment]::SetEnvironmentVariable('path', $env:USERPROFILE + "\.pyenv\pyenv-win\bin;" + $env:USERPROFILE + "\.pyenv\pyenv-win\shims;" + [System.Environment]::GetEnvironmentVariable('path', "User"),"User")

githubの説明に記載されているコマンドを入力する。

アプリ実行エイリアスのOFF

Windows10 1905以降の場合、PythonがWindows Storeからもインストールできるようになっているため、この機能をオフにする。

これでpyenvのインストールは完了。

インストール可能なPythonのバージョン確認

インストール可能なPythonのバージョンを確認する。

installに-lの引数を指定することで確認できる。

なお、たくさん出てくるので、findstrなどでメジャーバージョンぐらいは指定した方が良い。

> pyenv install -l | findstr 3.9
【出力例】
・・・
3.9.11-win32
3.9.11
3.9.12-win32
3.9.12
3.9.13-win32
3.9.13

バージョンを指定してPythonをインストール

installコマンドにインストールしたいPythonのバージョンを指定することで、Pythonをインストールする。

なお、複数のバージョンを同時にインストールすることが可能。

> pyenv install 3.9.13 3.10.4

インストール済みのPythonのバージョン確認

インストールされているPythonのバージョンを確認する。

> pyenv versions
【出力例】
  3.10.4
* 3.9.13 (set by C:\Users\KentaroAzuma\.pyenv\pyenv-win\version)

「*」がついているのが、globalとlocalで指定されているバージョン。

Pythonのバージョンを変更

globalとlocalの2種類がある。

プロジェクト毎にバージョン管理したい場合、localで指定することも可能だが、venvで仮想環境を作る場合、globalでも十分かもしれない。

localでPythonのバージョン変更

localでPythonのバージョンを指定すると、コマンドを実行したフォルダ以下でPythonを実行する際に、localで設定したバージョンが反映される。

> cd .\work
> pyenv local 3.10.4

workフォルダ以下でPythonを実行すると、10.3.4が実行されることになる。

globalでPythonのバージョン変更

globalはlocalが指定されていない場合に使用されるPythonのバージョンとなる。

> pyenv global 3.9.13

これでlocalが指定されていないフォルダからPythonを実行する場合、3.9.13のPythonが実行されることになる。

Pythonバージョン管理とvenv

Pythonの仮想環境としてvenvを使う場合、venv内のPythonはvenvコマンド実行時のPythonが使用される。

pyenvでglobalやlocalのPythonバージョンを変更してもvenv内のPythonのバージョンには影響しない。

venv内のPythonのバージョンを更新したい場合、localかglobalでPythonのバージョンを変更後にvenvを再作成する必要がある。

指定したバージョンのPythonのアンインストール

古いバージョンのPythonや、使わないマイナーバージョンのPythonなどはアンインストールしておくと、色々なバージョンがあることによる混乱を防げる。

> pyenv uninstall 3.6.0