pyenvをWindows (pyenv-win) とWSLでそれぞれインストールした際に、WSL側で以下のようなエラーが発生し、パスが衝突したため、回避する方法を共有します
/mnt/c/Users/[ユーザー名]/.pyenv/pyenv-win/bin/pyenv: 3: cygpath: not found
原因
本来WSL側のパスを参照すべきところを、Windows側のパスを参照しようとしていることが原因です
echo $PATHに/mnt/c/Users/[ユーザー名]/.pyenv/pyenv-win/binが含まれているのが確認できると思います
WSLはデフォルトでWindowsのパスを引き継ぐ設定となっており、Windowsでパスを設定すると自動でWSLにもパスが通ってしまいます
これはWSLからの実行を想定していないプログラムへのパスも通る可能性があり、その上、WSLからWindowsへのアクセスは非常に遅いためデフォルトで設定しているのは、とても気分が悪い設定です
そこで、その設定を解除する方法を紹介したいと思います
WSLへWindowsのPATH設定が引き継がれるのを解除する
方法は以下のページにて紹介されています
WSL2でWindowsのPATH設定が引き継がれるのを解除する
WSL側で以下のようにwsl.confを作成します
# WSL側
sudo vi /etc/wsl.conf
--
# WindowsのPATHを引き継がない設定を追記する
[interop]
appendWindowsPath = false
次にWindows側でWSLの再起動を行います
# Windows側
--
wsl.exe --shutdown
これにより、Windows側のパスがWSL側に引き継がれなくなったのが確認できると思います
個別にWindows側のパスを通したい場合
例えばVS CodeをWSLで使用する場合はWindows側のパスをWSLに通す必要がでてきます
その場合は.profileやシェルのrcファイルに
export PATH=$PATH:'/mnt/c/Users/[ユーザー名]/AppData/Local/Programs/Microsoft VS Code/bin'
を追記することでパスを通すことができます