前記事で公式版PythonとpipenvによるPython仮想環境の構築方法について書いたが、その中では以前のUbunuとMacを対象した記事で紹介したpyenvは使っていなかった。
pyenvにはWindows版が存在しており、これとpipenvを組み合わせると、下の記事で紹介したような複数のバージョンのPython仮想環境を自由に作成できるようになる。
複数のバージョンの公式版Pythonを利用したり、公式版Pythonとpipenvを組みわせる方法よりも柔軟性が高いので、Windows上でのPython仮想環境の構築方法としてはこれがお薦めと言えるだろう(公式版Pythonを使う必要性が特にないなら、初めから、本記事の内容に従ってPython開発環境を構築した方が良いと思う)。
本記事で、その方法について紹介しよう。
pyenv(pyenv-win)のインストール
Windows版pyenvはChocolateyを使ってインストールすることができる(Chocolateyについてはこちらの記事を参照のこと)。
> choco install -y pyenv-win
このコマンドを使うと、pyenv-winの実行ファイル群はフォルダ%HOMEPATH%\.pyenv
にインストールされる。
pyenvの環境変数設定
pyenv-winのインストール時にシステム環境変数に下の設定が追加される。
PYENV
=%USERPROFILE%\.pyenv\pyenv-win\
同時に以下の2つのパスがユーザー環境変数Path
に追加される。
%USERPROFILE%\.pyenv\pyenv-win\bin
%USERPROFILE%\.pyenv\pyenv-win\shims
ここで、元から存在しているパス "C:\Users\USERNAMR\AppData\Local\Microsoft\WindowsApps
" を上の2つより検索順が後になるように変更しておく。
この変更を行なう理由は、WindowsにもデフォルトのPythonが含まれており、上のパスの検索順を高くすると、そちらのpythonコマンド(C:\Users\USERNAME\AppData\Local\Microsoft\WindowsApps\python.exe
)が優先実行の対象となってしまうからだ。pyenv側のpythonコマンド(%HOMEPATH%\.pyenv\pyenv-win\shims\python
)が優先実行されるようするために、この変更が必要となる。
pyenvの実行確認
上記の操作が済んだら、pyenv
コマンドが実行できることを確認しておく。
> pyenv --version
pyenv 3.1.1
pyenvによるPythonのインストール
入手可能バージョン情報の更新
pyenvをインストールしたら、最初に下のコマンドを実行しておく。
> pyenv update
これによって、pyenvによって入手可能なPythonのバージョン情報が更新される。
将来新しいバージョンのPythonが追加された場合も、このコマンドによって最新のバージョン情報を取得することができる。
Pythonバージョンのインストール
下のコマンドによって、pyenvによってインストール可能なPythonのバージョン情報を取得できる。
> pyenv install --list :: [Info] :: Mirror: https://www.python.org/ftp/python 2.4-win32 2.4.1-win32 2.4.2-win32 2.4.3c1-win32 2.4.3-win32 2.4.4-win32 2.5-win32 2.5 2.5.1-win32 2.5.1 2.5.2-win32 2.5.2 2.5.3c1-win32 2.5.3c1 2.5.3-win32 2.5.3 2.5.4-win32 2.5.4 2.6-win32 2.6 2.6.1-win32 2.6.1 2.6.2c1-win32 2.6.2c1 2.6.2-win32 2.6.2 2.6.3rc1-win32 2.6.3rc1 2.6.3-win32 2.6.3 2.6.4rc1-win32 2.6.4rc1 2.6.4rc2-win32 2.6.4rc2 2.6.4-win32 2.6.4 2.6.5rc1-win32 2.6.5rc1 2.6.5rc2-win32 2.6.5rc2 2.6.5-win32 2.6.5 2.6.6rc1-win32 2.6.6rc1 2.6.6rc2-win32 2.6.6rc2 2.6.6-win32 2.6.6 2.7-win32 2.7 2.7.1rc1-win32 2.7.1rc1 2.7.1-win32 2.7.1 2.7.2rc1-win32 2.7.2rc1 2.7.2-win32 2.7.2 2.7.3rc1-win32 2.7.3rc1 2.7.3rc2-win32 2.7.3rc2 2.7.3-win32 2.7.3 2.7.4rc1-win32 2.7.4rc1 2.7.4-win32 2.7.4 2.7.5-win32 2.7.5 2.7.6rc1-win32 2.7.6rc1 2.7.6-win32 2.7.6 2.7.7rc1-win32 2.7.7rc1 2.7.7-win32 2.7.7 2.7.8-win32 2.7.8 2.7.9rc1-win32 2.7.9rc1 2.7.9-win32 2.7.9 2.7.10rc1-win32 2.7.10rc1 2.7.10-win32 2.7.10 2.7.11rc1-win32 2.7.11rc1 2.7.11-win32 2.7.11 2.7.12rc1-win32 2.7.12rc1 2.7.12-win32 2.7.12 2.7.13rc1-win32 2.7.13rc1 2.7.13-win32 2.7.13 2.7.14rc1-win32 2.7.14rc1 2.7.14-win32 2.7.14 2.7.15rc1-win32 2.7.15rc1 2.7.15-win32 2.7.15 2.7.16rc1-win32 2.7.16rc1 2.7.16-win32 2.7.16 2.7.17rc1-win32 2.7.17rc1 2.7.17-win32 2.7.17 2.7.18rc1-win32 2.7.18rc1 2.7.18-win32 2.7.18 3.0a1-win32 3.0a1 3.0a2 3.0a3-win32 3.0a3 3.0a4-win32 3.0a4 3.0a5-win32 3.0a5 3.0b1-win32 3.0b1 3.0b2-win32 3.0b2 3.0b3-win32 3.0b3 3.0rc1-win32 3.0rc1 3.0rc2-win32 3.0rc2 3.0rc3-win32 3.0rc3 3.0-win32 3.0 3.0.1-win32 3.0.1 3.1-win32 3.1 3.1.1-win32 3.1.1 3.1.2rc1-win32 3.1.2rc1 3.1.2-win32 3.1.2 3.1.3rc1-win32 3.1.3rc1 3.1.3-win32 3.1.3 3.1.4rc1-win32 3.1.4rc1 3.1.4-win32 3.1.4 3.2-win32 3.2 3.2.1-win32 3.2.1 3.2.2-win32 3.2.2 3.2.3-win32 3.2.3 3.2.4-win32 3.2.4 3.2.5-win32 3.2.5 3.3.0-win32 3.3.0 3.3.1-win32 3.3.1 3.3.2-win32 3.3.2 3.3.3-win32 3.3.3 3.3.4rc1-win32 3.3.4rc1 3.3.4-win32 3.3.4 3.3.5rc1-win32 3.3.5rc1 3.3.5rc2-win32 3.3.5rc2 3.3.5-win32 3.3.5 3.4.0a1-win32 3.4.0a1 3.4.0a2-win32 3.4.0a2 3.4.0a3-win32 3.4.0a3 3.4.0a4-win32 3.4.0a4 3.4.0b1-win32 3.4.0b1 3.4.0b2-win32 3.4.0b2 3.4.0b3-win32 3.4.0b3 3.4.0rc1-win32 3.4.0rc1 3.4.0rc2-win32 3.4.0rc2 3.4.0rc3-win32 3.4.0rc3 3.4.0-win32 3.4.0 3.4.1rc1-win32 3.4.1rc1 3.4.1-win32 3.4.1 3.4.2rc1-win32 3.4.2rc1 3.4.2-win32 3.4.2 3.4.3rc1-win32 3.4.3rc1 3.4.3-win32 3.4.3 3.4.4rc1-win32 3.4.4rc1 3.4.4-win32 3.4.4 3.5.0a1-win32 3.5.0a1 3.5.0a2-win32 3.5.0a2 3.5.0a3-win32 3.5.0a3 3.5.0a4-win32 3.5.0a4 3.5.0a5-win32 3.5.0a5 3.5.0b1-win32 3.5.0b1 3.5.0b2-win32 3.5.0b2 3.5.0b3-win32 3.5.0b3 3.5.0b4-win32 3.5.0b4 3.5.0rc1-win32 3.5.0rc1 3.5.0rc2-win32 3.5.0rc2 3.5.0rc3-win32 3.5.0rc3 3.5.0rc4-win32 3.5.0rc4 3.5.0-win32 3.5.0 3.5.1rc1-win32 3.5.1rc1 3.5.1-win32 3.5.1 3.5.2rc1-win32 3.5.2rc1 3.5.2-win32 3.5.2 3.5.3rc1-win32 3.5.3rc1 3.5.3-win32 3.5.3 3.5.4rc1-win32 3.5.4rc1 3.5.4-win32 3.5.4 3.6.0a1-win32 3.6.0a1 3.6.0a2-win32 3.6.0a2 3.6.0a3-win32 3.6.0a3 3.6.0a4-win32 3.6.0a4 3.6.0b1-win32 3.6.0b1 3.6.0b2-win32 3.6.0b2 3.6.0b3-win32 3.6.0b3 3.6.0b4-win32 3.6.0b4 3.6.0rc1-win32 3.6.0rc1 3.6.0rc2-win32 3.6.0rc2 3.6.0-win32 3.6.0 3.6.1rc1-win32 3.6.1rc1 3.6.1-win32 3.6.1 3.6.2rc1-win32 3.6.2rc1 3.6.2rc2-win32 3.6.2rc2 3.6.2-win32 3.6.2 3.6.3rc1-win32 3.6.3rc1 3.6.3-win32 3.6.3 3.6.4rc1-win32 3.6.4rc1 3.6.4-win32 3.6.4 3.6.5rc1-win32 3.6.5rc1 3.6.5-win32 3.6.5 3.6.6rc1-win32 3.6.6rc1 3.6.6-win32 3.6.6 3.6.7rc1-win32 3.6.7rc1 3.6.7rc2-win32 3.6.7rc2 3.6.7-win32 3.6.7 3.6.8rc1-win32 3.6.8rc1 3.6.8-win32 3.6.8 3.7.0a1-win32 3.7.0a1 3.7.0a2-win32 3.7.0a2 3.7.0a3-win32 3.7.0a3 3.7.0a4-win32 3.7.0a4 3.7.0b1-win32 3.7.0b1 3.7.0b2-win32 3.7.0b2 3.7.0b3-win32 3.7.0b3 3.7.0b4-win32 3.7.0b4 3.7.0b5-win32 3.7.0b5 3.7.0rc1-win32 3.7.0rc1 3.7.0-win32 3.7.0 3.7.1rc1-win32 3.7.1rc1 3.7.1rc2-win32 3.7.1rc2 3.7.1-win32 3.7.1 3.7.2rc1-win32 3.7.2rc1 3.7.2-win32 3.7.2 3.7.3rc1-win32 3.7.3rc1 3.7.3-win32 3.7.3 3.7.4rc1-win32 3.7.4rc1 3.7.4rc2-win32 3.7.4rc2 3.7.4-win32 3.7.4 3.7.5rc1-win32 3.7.5rc1 3.7.5-win32 3.7.5 3.7.6rc1-win32 3.7.6rc1 3.7.6-win32 3.7.6 3.7.7rc1-win32 3.7.7rc1 3.7.7-win32 3.7.7 3.7.8rc1-win32 3.7.8rc1 3.7.8-win32 3.7.8 3.7.9-win32 3.7.9 3.8.0a1-win32 3.8.0a1 3.8.0a2-win32 3.8.0a2 3.8.0a3-win32 3.8.0a3 3.8.0a4-win32 3.8.0a4 3.8.0b1-win32 3.8.0b1 3.8.0b2-win32 3.8.0b2 3.8.0b3-win32 3.8.0b3 3.8.0b4-win32 3.8.0b4 3.8.0rc1-win32 3.8.0rc1 3.8.0-win32 3.8.0 3.8.1rc1-win32 3.8.1rc1 3.8.1-win32 3.8.1 3.8.2rc1-win32 3.8.2rc1 3.8.2rc2-win32 3.8.2rc2 3.8.2-win32 3.8.2 3.8.3rc1-win32 3.8.3rc1 3.8.3-win32 3.8.3 3.8.4rc1-win32 3.8.4rc1 3.8.4-win32 3.8.4 3.8.5-win32 3.8.5 3.8.6rc1-win32 3.8.6rc1 3.8.6-win32 3.8.6 3.8.7rc1-win32 3.8.7rc1 3.8.7-win32 3.8.7 3.8.8rc1-win32 3.8.8rc1 3.8.8-win32 3.8.8 3.8.9-win32 3.8.9 3.8.10-win32 3.8.10 3.9.0a1-win32 3.9.0a1 3.9.0a2-win32 3.9.0a2 3.9.0a3-win32 3.9.0a3 3.9.0a4-win32 3.9.0a4 3.9.0a5-win32 3.9.0a5 3.9.0a6-win32 3.9.0a6 3.9.0b1-win32 3.9.0b1 3.9.0b2-win32 3.9.0b2 3.9.0b3-win32 3.9.0b3 3.9.0b4-win32 3.9.0b4 3.9.0b5-win32 3.9.0b5 3.9.0rc1-win32 3.9.0rc1 3.9.0rc2-win32 3.9.0rc2 3.9.0-win32 3.9.0 3.9.1rc1-win32 3.9.1rc1 3.9.1-win32 3.9.1 3.9.2rc1-win32 3.9.2rc1 3.9.2-win32 3.9.2 3.9.3-win32 3.9.3 3.9.4-win32 3.9.4 3.9.5-win32 3.9.5 3.9.6-win32 3.9.6 3.9.7-win32 3.9.7 3.9.8-win32 3.9.8 3.9.9-win32 3.9.9 3.9.10-win32 3.9.10 3.9.11-win32 3.9.11 3.9.12-win32 3.9.12 3.9.13-win32 3.9.13 3.10.0a1-win32 3.10.0a1 3.10.0a2-win32 3.10.0a2 3.10.0a3-win32 3.10.0a3 3.10.0a4-win32 3.10.0a4 3.10.0a5-win32 3.10.0a5 3.10.0a6-win32 3.10.0a6 3.10.0a7-win32 3.10.0a7 3.10.0b1-win32 3.10.0b1 3.10.0b2-win32 3.10.0b2 3.10.0b3-win32 3.10.0b3 3.10.0b4-win32 3.10.0b4 3.10.0rc1-win32 3.10.0rc1 3.10.0rc2-win32 3.10.0rc2 3.10.0-win32 3.10.0 3.10.1-win32 3.10.1 3.10.2-win32 3.10.2 3.10.3-win32 3.10.3 3.10.4-win32 3.10.4 3.10.5-win32 3.10.5 3.10.6-win32 3.10.6 3.10.7-win32 3.10.7 3.10.8-win32 3.10.8 3.10.9-win32 3.10.9 3.10.10-win32 3.10.10 3.10.11-win32 3.10.11 3.11.0a1-win32 3.11.0a1 3.11.0a2-win32 3.11.0a2 3.11.0a3-win32 3.11.0a3 3.11.0a4-win32 3.11.0a4 3.11.0a5-win32 3.11.0a5 3.11.0a6-win32 3.11.0a6 3.11.0a7-win32 3.11.0a7 3.11.0b1-win32 3.11.0b1 3.11.0b2-win32 3.11.0b2 3.11.0b3-win32 3.11.0b3 3.11.0b4-win32 3.11.0b4 3.11.0b5-win32 3.11.0b5 3.11.0rc1-win32 3.11.0rc1 3.11.0rc2-win32 3.11.0rc2 3.11.0-win32 3.11.0 3.11.1-win32 3.11.1 3.11.2-win32 3.11.2 3.11.3-win32 3.11.3 3.11.4-win32 3.11.4 3.11.5-win32 3.11.5 3.11.6-win32 3.11.6 3.11.7-win32 3.11.7 3.12.0a1-win32 3.12.0a1 3.12.0a2-win32 3.12.0a2 3.12.0a3-win32 3.12.0a3 3.12.0a4-win32 3.12.0a4 3.12.0a5-win32 3.12.0a5 3.12.0a6-win32 3.12.0a6 3.12.0a7-win32 3.12.0a7 3.12.0b1-win32 3.12.0b1 3.12.0b2-win32 3.12.0b2 3.12.0b3-win32 3.12.0b3 3.12.0b4-win32 3.12.0b4 3.12.0rc1-win32 3.12.0rc1 3.12.0rc2-win32 3.12.0rc2 3.12.0rc3-win32 3.12.0rc3 3.12.0-win32 3.12.0 3.12.1-win32 3.12.1 3.13.0a1-win32 3.13.0a1 3.13.0a2-win32 3.13.0a2 3.13.0a3-win32 3.13.0a3
使用する予定のバージョンのPythonをあらかじめインストールしておく。
> pyenv install 3.12.1 > pyenv install 3.11.7 > pyenv install 3.10.11 > pyenv install 3.9.13 > pyenv install 3.8.10 > pyenv rehash
後から追加することもできるので、適当なバージョンを一つ選んでインストールしておいても良いだろう。
インストール済みバージョンの表示
pyenvによってインストール済みのPythonのバージョンは、下のコマンドによって確認することができる。
> pyenv versions 3.10.11 3.11.7 3.12.1 3.8.10 3.9.13
pyenv上でのpipenvのインストール
pipenvのインストール
> pyenv global 3.12.1 > cd > python --version Python 3.12.1 > pip install pipenv
pipenvの環境変数設定
pipenvがインストールができたら、ユーザー環境変数に "PIPENV_VENV_IN_PROJECT
" = "true
" という設定を作成しておく。
PowerShellから下のコマンドを実行すれば、その設定操作が行える。
> [System.Environment]::SetEnvironmentVariable("PIPENV_VENV_IN_PROJECT", "true", "User")
この設定をしておくと、プロジェクトディレクトリ内に.venv
というディレクトリが作成され、仮想環境のPythonインタープリタおよびパッケージはその中にインストールされるようになる。
pyenv+pipenvによる仮想環境作成/削除
仮想環境の作成
> mkdir PROJECT_DIR > cd PROJECT_DIR > pyenv local 3.12.1 > python --version Python 3.12.1 > pipenv --python 3.12.1
仮想環境の削除
> cd PROJECT_DIR > pipenv --rm
pipenvによるパッケージ管理
パッケージのインストール
> pipenv install PACKAGE_NAME
開発用パッケージのインストール
> pipenv install --dev PACKAGE_NAME
パッケージのアンインストール
> pipenv uninstall PACKAGE_NAME
pipenvによるPythonプログラム実行
仮想環境によって直接プログラムを実行
> pipenv run python PROGRAM.py
仮想環境を起動して、プログラムを実行
> pipenv shell > python PROGRAM.py ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ > exit
補足説明
すでに公式版Pythonをインストール済みの場合、それとpyenvによってインストールするPythonがバッティングしてしまう。
公式版Pythonをすべてアンインストールするか、pyenv側のPythonが優先されるように調整する必要がある。
公式版Pythonのアンインストール
Chocolateyを使って公式版Pythonをインストールした場合は、下のコマンドによってをアンイストールできる。
> choco uninstall -y python
本記事の内容に従って、pyenvとpipenvによって作成した仮想環境だけを使ってPythonプログラム開発を行うなら、公式版Pythonを利用する必要性はない。
公式版よりpyenv側のPythonを優先する設定
公式版Pythonのインストール時に追加された以下の2つのパスをシステム環境変数Path
から削除して、ユーザー環境変数Path
へ移動追加する。
C:\Python312\Scripts\
C:\Python312\
その場合、pyenvによって追加された2つのパスより検索順が後になるようにする。
複数のバージョンの公式版Pythonをインストールしていた場合は、同様のすべてのパスをシステム環境変数Path
から削除して、ユーザー環境変数Path
へ移動追加しておく。
前記事の内容に従って、pipenv用の下のパスをユーザー環境変数Path
へ追加していた場合は、これを削除する。
C:\Users\USERNAME\AppData\Roaming\Python\Python312\Scripts
pyenv側のpipコマンドを使ってpipenvをインストールでき、それによって仮想環境を作成できるので、公式版Python側のpipenvは不要となる。
【参照リンク】