🤖

pyenvをWindowsにインストール

2023/03/30に公開

pyenvのWindowsへのインストール

Windows用のpyenvのインストール方法です。
Windows用のpyenvが以下のサイトに公開されています。
https://github.com/pyenv-win/pyenv-win

基本的に上記サイトに記載されている手順でインストール可能ですが、
少し補足を加えながら手順を説明します。

上記サイトに記載されているインストール方法のうち、
Gitコマンドを使用する方法が最新版のpyenvを使用できて便利だと思います。
pipコマンドを使用する方法だと最新版のpyenvを使用できず、最近リリースされたPythonをpyenvでインストールできないことがありました。

以下、PowerShellで実行していきます。

まず以下のコマンドでpyenv-winのソースコードをホームフォルダ直下にcloneしてきます。

git clone https://github.com/pyenv-win/pyenv-win.git "$HOME\.pyenv"

次に以下のコマンドで環境変数PYENV, PYENV_ROOT, PYENV_HOMEを設定します。

[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")

最後に以下のコマンドで環境変数PATHを更新します。

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

PowerShellを再起動すると環境変数の変更が反映され、
以下のコマンドでインストール成功を確認できます。

pyenv --version

pythonコマンドを実行すると、
pyenvにより自動でPowerShellの文字エンコードが
コードページ1250に変更されてしまうことがあります。
現在のコードページは

chcp

コマンドで確認可能です。

この対応策として、
pythonコマンド実行前に

[Console]::InputEncoding = [System.Text.Encoding]::GetEncoding("utf-8")
[Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("utf-8")

を実行しておくと、
日本語を含むテキストをPowerShellのコンソールに貼り付けても文字化けしなくなり、
Pythonスクリプトにも引数のUTF-8の文字列が正しく渡されるようになります。

pythonコマンド実行後には、再びコードページが1250に変更されてしまうことがあるので、
その場合はpythonコマンド実行前に都度上記のエンコード設定を実行する必要があります。

WSL2でもpyenvをインストール済みの場合にWSL2でpyenvを使用する際の注意点

WSL2の方にもpyenvをインストールしている場合は、
通常はWindows側で設定している環境変数PATHの設定値が優先されてしまって
WSL2側のpyenvではなくWindows側のpyenvが使用されてエラーとなることがありました。

具体的には
https://github.com/pyenv/pyenv
に記載の手順では、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

しかし、この2行目のコマンドで、
pyenvがWindows側でインストールされてしまっているので、
command -v pyenv >/dev/nullによるpyenvへのパスの疎通確認が成功してしまいます。
そのため、後続の環境変数PATHの更新コマンドexport PATH="$PYENV_ROOT/bin:$PATH"の実行がスキップされてしまいます。

解決策としては、この2行目のコマンドを以下のとおり修正して
常に環境変数PATHの更新を実行する案が挙げられます。

echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc

Discussion