Pyenv 狂信者なので ←
問題
- WSLに
pyenvを入れていた - Windows で直接 python がやりたくなって、Windows (PowerShell) に
pyenv-winを入れた - WSL起動時に以下が出るようになって
pyenvが使えなくなった
/mnt/c/Users/foobar/.pyenv/pyenv-win/bin/pyenv: 3: cygpath: not found
/mnt/c/Users/foobar/.pyenv/pyenv-win/bin/pyenv: 3: exec: cmd: not found
詳しく状況を調べてみる
- WSLで、
whereでpyenvがどこを指しているか確認
➜ ~ which pyenv
/mnt/c/Users/foobar/.pyenv/pyenv-win/bin/pyenv
- 本当は
/home/foobar/.pyenv/bin/pyenvとかを指していてほしいのにpyenv-winに上書きされていた - WSLで、
whereisコマンドでpyenv関係のコマンドを一覧してみる
➜ ~ whereis pyenv
pyenv: /mnt/c/Users/foobar/.pyenv/pyenv-win/bin/pyenv /mnt/c/Users/foobar/.pyenv/pyenv-win/bin/pyenv.bat /mnt/c/Users/foobar/.pyenv/pyenv-win/bin/pyenv.ps1
-
/usr/bin/pyenvはなぜかないけど、.batと.ps1があった。コマンドプロンプトでは.bat、PowerShellでは.ps1が使われるだろうけど1つ目はWSLにとって邪魔なだけで要らなそうな気がする - 実際、PowerShell で
pyenvコマンドがどこを指しているか確認してみると↑と一致。
PS C:\Users\foobar> (gcm pyenv).Definition
C:\Users\foobar\.pyenv\pyenv-win\bin\pyenv.ps1
PS C:\Users\foobar>
解決法 (もっといい方法募集)
- WSL で、
whichで出てきたやつをどっかにやって、/home/foobar/.pyenv/bin/pyenvのシンボリックリンクを張りなおす
➜ mv /mnt/c/Users/foobar/.pyenv/pyenv-win/bin/pyenv /mnt/c/Users/stapr/.pyenv/pyenv-win/bin/_pyenv
➜ sudo ln -s /home/nm/.pyenv/bin/pyenv /usr/bin/pyenv
で、

