PR

Windows版pyenvで「update」がエラーになる場合の対処法

プログラミング

以前はScoop版pyenv(pyenv-win)でPythonがインストールできない場合の対処法を提示しました。

今度はScoop版だけでなくWindows11環境においてpyenvのupdateコマンドが動作しない不具合が発生しているようなので、対処法を示します。

困っている方の記事を見かけたのでちょっと早めに記事化しました。

環境

  • Windows11 24H2 (26100.4946)
  • PowerShell 7.5.2
  • pyenv 3.1.1 (「scoop install pyenv」でインストールしたもの。中身はpyenv-win)

症状

updateエラー

Microsoftの方針だかなんだかでVBScriptがhtmlファイルのサポートを廃止したっぽいです。

VBScriptはその脆弱性から2027年頃にそれ自体を廃止される予定です。

対処法

修正ファイルをダウンロード

feat: migrate pyenv-update to PowerShell for Windows 11 compatibility by profabioalvespinto · Pull Request #724 · pyenv-win/pyenv-win
DescriptionModernized pyenv-win update functionality by migrating from VBScript to PowerShell, addressing Windows 11 com...

対症療法ですが、上記URLから下記ファイルをダウンロードしてください。

  • pyenv-update-optimized.ps1
  • pyenv-update.ps1
  • pyenv-update.cmd

内容の確認

正式なバージョンではないため、セキュリティ的に危険な場合もありえます。

必ずファイルの内容に悪意あるコードが無いことを確認してください

各ファイルをpyenvの所定フォルダにコピー

ダウンロードした3つのファイルを「libexec」フォルダにコピーしてください。

Scoop版の場合は”C:\Users\<user>\scoop\apps\pyenv\current\pyenv-win\libexec”などにあると思います。

updateを実行

あとは「pyenv update」でちゃんとPythonリストがアップデートされるはずです。

python versions list

注意点

あくまでも対症療法です。

commandsエラー

一部の機能に不具合が発生したり、ミラー先が1つだけだったりします。

「libexec」フォルダにある「pyenv-update.vbs」を削除または別フォルダに移動させるとエラーは改善しますが、別にそのままでもOKです。

GIL解除版もインストールしたい場合

GIL解除版がインストールリストから外れてたので、それをインストールしたい場合は「pyenv-update-optimized.ps1」の49行目の

$regexFile = [regex]'python-(\d+)\.(\d+)(?:\.(\d+))?(?:([a-z]+)(\d+))?(?:-(amd64|win32|arm64))?(?:-(web)installer)?\.(.+)'

この部分を

$regexFile = [regex]'python-(\d+)\.(\d+)(?:\.(\d+))?(?:([a-z]+)(\d*))?(?:-(amd64|win32|arm64))?(?:-(web)installer)?\.(.+)'

一箇所変えるだけで「3.13.◯t」がインストールリストに入ります。

まとめ

最近のPython開発はuvばかり使ってるのでこんなエラーがあるなんて気付きませんでした。

コメント

タイトルとURLをコピーしました