LoginSignup
0
1

More than 1 year has passed since last update.

WSL2 上の Ubuntu に pyenv 環境を作ろうとしてハマった

Posted at

WSL2 上の Ubuntu 22.04.1 LTS に pyenv 環境を作ろうとしてハマったので対応策のメモ

実行した手順

GitHub の pyenv のページに書かれている手順に従い、

$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
$ echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(pyenv init -)"' >> ~/.bashrc

を実行し、シェルの再起動

$ exec "$SHELL"

ここで

/mnt/c/Users/mare_ism/.pyenv/pyenv-win/bin/pyenv: 3: cygpath: not found
/mnt/c/Users/mare_ism/.pyenv/pyenv-win/bin/pyenv: 3: exec: cmd: not found

というエラーメッセージが出てしまう。

当然、pyenv のバージョン確認

$ pyenv --version

を実行しても同じメッセージが出る。

原因調査

エラーメッセージを見れば分かるように、マウントした Windows のフォルダを見に行ってしまっている。(Windows 側では既に pyenv の環境を構築済み)

パスを確認すると

$ echo $PATH
/mnt/c/Users/mare_ism/.pyenv/pyenv-win/bin/

にパスが通っているのが分かった。ここにある Windows 用の pyenv を実行しようとしてエラーが発生しているわけだ。

パスを追加しているはずじゃないの?

Ubuntu 側の pyenv にパスを通すために

$ echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc

を実行しているが、これは pyenv が見つからなかったときに $PYENV_ROOT/bin (つまり、$HOME/.pyenv/bin)をパスに追加する、というコマンドになっている。

しかし、

$ command -v pyenv

を実行すると

/mnt/c/Users/mare_ism/.pyenv/pyenv-win/bin/pyenv

が返ってきてしまい、|| 以降のコマンドが実行されないままになっていた。

対応方法

$ echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc

のコマンドを

$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc

に変更して実行。

既に元のコマンドを実行している場合は .bashrc ファイルの末尾が

export PYENV_ROOT="$HOME/.pyenv"
command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

ではなく

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

になるように直接編集してもよい。

実行結果

改めてシェルを再起動し、pyenv のバージョン確認

$ pyenv --version

の結果が

pyenv 2.3.6-4-g904fe964

と表示された。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1