Windowsに快適Python環境入れる!

WSLではなく直接WindowsにPythonの環境を構築するときの備忘録
個人的に環境としてはpyenv + poetryが快適。
PATHの通り方次第でpythonコマンドがpyenvのPythonを参照してくれず、所望のバージョンのPythonを使用してくれなくてめんどくさい時があるので注意

Windowsに直接pyenv入れる場合はpyenv-winを入れる
インストール方法はREADMEに書いている以下の4つ
- pipを使う(すでにPythonを入れている場合)
- この場合たぶんPATHに注意が必要?
- zipファイルをダウンロードする
- gitでリポジトリをcloneする
- Chocolateyを使う
今回はPython環境を新規に入れる想定
今までChocolateyにお世話になっていたけれど新しいPCでwingetに乗り換えたいので今回はgitで入れる方法を選択

READMEに書いてある内容そのまま
PowerShellで以下のコマンドを実行していく
Windows PowerShellではコマンドエラーにはならなかったが、環境変数の作成もPATHの追加も行われなかった
git cloneして
git clone https://github.com/pyenv-win/pyenv-win.git "$HOME/.pyenv"
環境変数作って
[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")
ターミナルを再起動したらちゃんとpyenvコマンドが有効になってる
> pyenv --version
pyenv 2.64.11

とりあえず適当なバージョンのPythonをpyenvで入れて有効にする
インストール可能なPythonのバージョンを確認
pyenv install --list
インストール
pyenv install <インストールしたいバージョン>
globalで使うPythonのバージョンとして設定
pyenv global <インストールしたバージョン>
これでpythonコマンドが有効になる
> python --version
Python 3.9.6

次にpoetryを入れていく
以下のコマンドでインストール
この際(多分)pythonコマンドが有効になっている必要があるので上記の手順で先にpyenvでpythonを有効にしておく
(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | python -
PATHを通す
[System.Environment]::SetEnvironmentVariable('path', $env:USERPROFILE + "\AppData\Roaming\Python\Scripts;" + [System.Environment]::GetEnvironmentVariable('path', "User"),"User")
ターミナルを再起動すればpoetryコマンドが有効になっている
> poetry --version
Poetry version 1.1.13

poetryはデフォルトで仮想環境を一か所のフォルダ下に作成していくが、どの仮想環境がどのプロジェクトのものかよくわからなくなるのと、VSCodeでの使い勝手が変わってくるので、プロジェクト下にそれぞれ仮想環境を作成するように設定しておくのがおすすめ
poetry config virtualenvs.in-project true

WindowsでPythonを公式のインストーラでインストールすると、Python Launcherがインストールされて、pyenvの代わりみたいな使い方ができるらしい

Windowsのpyenvは正確にはpyenvからfolkして作られたpyenv-winだから、それよりも公式でついてくるPython Launcherを使う方が筋がいい気がしてきた

poetryのinstall時にpythonコマンドに渡しているリンクを見れば実際に実行しているスクリプトが見れる
見ると--uninstallなどのオプションが渡せるみたい

このコマンドでuninstallできた
(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | python - --uninstall

pyenvはパス関連全部消してやり直す

とりあえずPython入れなおす
winget search --name python
winget install Python.Python.3

poetryは全く同じ入れ方で入れられる

Python Launcherで複数バージョンのPythonを管理するの、すでにインストール済みの場合便利だけど、旧バージョンをインストールする場合いちいちインストーラーが必要みたいでめんどくさい
その辺はpyenvの方が楽かな

Python Launcherとpoetryをセットで使いたい場合、まず最初に仮想環境作成
py -3.x -m venv .venv

wingetでバージョン指定で旧バージョンもインストールできるようになってる
もしくは昔からできた???
Python 3.6をインストールする場合
winget install -i Python.Python.3.6

Python公式の仮想環境使えばpoetry使わなくてもいい気もしてきた