Windowsでgit bash から pyenv-venv環境を構築する (pyenv-win)

少しはまったのでメモ

1. python をダウンロード&インストール

環境変数は設定しておく
非公式Pythonダウンロードリンク - Python downloads

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

`pip install pyenv-win --target "$HOME.pyenv"

3. 環境変数を設定

pythonを呼び出したときにpyenvの方を読んでもらうため、一番うえに来るように設定しておく。
この時点ではshimsのほうはまだ存在していない(pyenv instlal XXXでpython環境をインストールすると自動的に生成される)が、どうせ必要になるので今やっておく。

C:\Users\<ユーザ名>\.pyenv\pyenv-win\shims
C:\Users\<ユーザ名>\.pyenv\pyenv-win\bin

4. pyenvで使うpythonをインストールする

pythonのバージョン3.8.2及び、仮想環境のインストール先myPyenv/.myenvは任意に変更可能です。以下は脳内変換してください。

## 入手可能なバージョンを確認
$ pyenv versions
## インストール
$ pyenv install 3.8.2  #python 3.8.2の場合

5. cmdに切り替えたあと、pyenvを生成

以下はコマンドラインに切り替えて実行をしましょう。

## 仮想環境を構築するディレクトリを生成・移動
$ mkdir myPyenv
$ cd myPyenv
## myPyenv以下ではpython 3.8.2を使いますよ、という宣言
$ pyenv local 3.8.2
$ pyenv rehash

この時点で、pythonは3.8.2が呼ばれるはずです。 この作業をgit bashのままやってしまうと、pyenv versionsは3.8.2になってくれるのに、python --verisonは#1でダウンロード&インストールしたバージョンが選択されてしまいます。 次に実行するpython -m venv .myenvで作られる仮想環境は、そのタイミングで呼ばれるpythonのバージョンがベースになるので、python --versionで3.8.2になっていないと困ります。

# 確認
$ pyenv versions
* 3.8.2 
# 確認
$ python --version
3.8.2
# 仮想環境作成
$ python -m venv .myenv

これで基本的にはOKです。でも、windowsbash経由で仮想環境を行き来するのは面倒なので、~/.bashrcに以下のようなエイリアスを貼っておくとよいと思います

function myenv(){
    cd C:/Users/<ユーザ名>/myPyenv/.myenv/Scripts
    . activate
    cd -
}
alias python='winpty python.exe'
alias myenv=myenv

これでターミナルを再起動する(あるいはsource ~/.bashrc)と、myenvと打つだけで仮想環境に入り込めます。

$ myenv
/c/Users/<ユーザ名>
(myenv)

deactivateと打つと抜け出せます。