pyenvをWindowsにインストール
pyenvのWindowsへのインストール
Windows用のpyenvのインストール方法です。
Windows用のpyenvが以下のサイトに公開されています。
基本的に上記サイトに記載されている手順でインストール可能ですが、
少し補足を加えながら手順を説明します。
上記サイトに記載されているインストール方法のうち、
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が使用されてエラーとなることがありました。
具体的には
以下のコマンドで.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