python環境(windows10)


windows10でのpython環境を作成するときの一例

  • pyenvでpythonバージョンを切り替える
  • パッケージはvenvで個々に管理する

全体の流れ

1.pythonのインストール
2.pyenv-winのインストール
3.必要に応じてvenv

1. pythonインストール

公式のインストーラーでインストール
add pythonXX to PATH にチェックをいれないと面倒なのでチェックを必ず入れる
それ以外はデフォルトのまま
(必要な場合はカスタマイズしてください)

2. pyenv-winのインストール

pyenv-win

cmd
pip install pyenv-win --target %USERPROFILE%/.pyenv

※ pythonインストール時にPATHに追加し忘れて、C:\Users\ユーザー名\AppData\Local\Programs\Python\Python39だけPATHに手で追加したがpipが動かないので先頭にpython -m をつけて(これ↓)実行した)

cmd
pipを直接指定して動かない場合
python -m pip install pyenv-win --target %USERPROFILE%/.pyenv

※PowerShell(or Git Bash)の場合は変数の名前が異なる。(\$HOMEを使用する)

powershell
pip install pyenv-win --target $HOME\.pyenv

これで、C:\Users\ユーザー名.pyenv が作成される。

この2つのパスをPATHに追加する
C:\Users\ユーザー名.pyenv\pyenv-win\bin は存在しているが 最初はshimsは無い。

%USERPROFILE%\.pyenv\pyenv-win\bin
%USERPROFILE%\.pyenv\pyenv-win\shims

手で追加してもいいし、次のpowershellでやってもよい
(手で追加の場合は、先頭におくこと。
 既存の "C:/Users/[user]/AppData/Local/Microsoft/WindowsApps" これより先に位置していないと、pythonコマンドを叩くとMicrosoftストアが表示されてしまう)

powershell(管理者実行が必要)
[System.Environment]::SetEnvironmentVariable('PATH', $HOME + "\.pyenv\pyenv-win\bin;" + $HOME + "\.pyenv\pyenv-win\shims;" + $env:Path,"Machine")

※多くの解説記事にこれも書いてあるけどなくても動くかも
環境変数の「PYENV」に
%USERPROFILE%\.pyenv\pyenv-win
を手で追加。または次のpowershell

powershell
[System.Environment]::SetEnvironmentVariable('PYENV',$env:USERPROFILE + "\.pyenv\pyenv-win\","User")

新しくcmdかpowershellを立ち上げて(新しく立ち上げないと今設定した環境変数が反映されない)
正しく設定されているか確認。

pyenv --version
pyenv 2.64.6.1

利用できるバージョンの確認

pyenv install --list
または
pyenv install -l

(ずらずらと利用可能なバージョンが表示される)

使いたいバージョンを入れる

pyenv install 3.7.9
:
pyenv install 3.9.4

使いそうなものをいくつか入れておけば、瞬時に切り替えられる。(後述)

installしたものは、versionsで確認できる

pyenv versions
3.7.9
3.9.4

切り替えるときは

pyenv local 3.9.4

local を使って切り替える。
local はユーザごとの環境を変えるコマンド。全ユーザに影響するのはglobal
(私はlocalしか使ったことがない)

このコマンドを叩いたディレクトリに.python-versionという、バージョン番号が書かれたファイルが作成される。
その場所でpythonを実行するときは.python-versionに書かれたバージョンのpythonが実行される。

用途やプロジェクトに応じて、pythonのバージョンを切り替えられる。

現在設定されているバージョンの表示は

pyenv version
さっきのはversionsで複数形だったがこっちは単数形

バージョンがうまく切り替わらないとか、問題が発生した場合

pyenv rehash

今のところ使ったことはない。

3. 必要に応じてvenv

仮想環境を作る
仮想環境ごとにパッケージを管理できるので、
用途やプロジェクトごとにそれ用のパッケージをインストールできる。

プロジェクトA:pandas1.0、numpy1.8
プロジェクトB:pandas1.2、numpy1.19

を使いたい場合とかに以下のように2つ仮想環境作って、切り替えて使用する。

プロジェクトA -> 仮想環境A
プロジェクトB -> 仮想環境B

仮想環境は任意の場所にフォルダ名(仮想環境名)を指定して作成できる。

cmd
python -m venv <任意の名前>


この名前にすることが多い
python -m venv .venv

切り替えるときはその場所のスクリプトを叩く。

cmdまたはVSCodeのターミナルなど
仮想環境名/Scripts/activate.bat



settings.json
// VSCodeでは ".vscode\settings.json" にこのスクリプトが実行されるように設定する
{
  "python.pythonPath": ".venv\\Scripts\\python.exe",

/* お好みで
  "python.linting.flake8Args": [
    "--max-line-length=120",
    "--max-complexity","20"
  ],
  "python.dataScience.textOutputLimit": 0,
  "editor.mouseWheelZoom": true
*/
}

Anaconda、virtualenv、pipenvなどpythonの環境管理はさまざまありますが、いろいろ試した結果この形に落ち着きました。