ubuntu에서 pyenv 쓰던 사람들은, 당연히 wsl에서도 동작하겠지 생각하지만
아니다!!! 경로에러 난다.
나도 3개월을 찾아헤매다가 한 20번은 실패한 듯한데...
윈도우에서 파일을 다루는 코드를 짜다보면 검색이나 깃허브에서 찾은 맥os/ubuntu 기준으로 만들어 둔 코드는 실행시 path error 자주 마주함.
맥os 에서 작성한 코드보면 맥용 file path로만 코딩해 둔 경우가 많음.
(리눅스 쓰는 애들은 윈도우도 같이 써서 그런지, 괜찮은 코드는 시스템os 따져서 경로 설정하게끔 코드 만들어 둠.)
어쨋거나 공유해 준 것만 해도 고마우니 Path경로 고치다가 보면 아~ 시간이 점점 늘어나고,
간단히 돌려만 보려고 했는데 시간생각 하면 아까움.
그래서 wsl에서 pyenv 못 쓰는게 너무 아쉬워 시간날 때마다 찾았는데... 결국 스택오버플로가 해결해 줌.
결국 wsl의 path가 윈도우path를 먼저 물고 오는 것이 원인임.
(이걸 강제로 symbol link를 바꾸니, 또 다른 조건에서 에러가 발생하니 최종 결론은 아래 코드 적용하는 것이 최고임)
# ERROR
-bash: /mnt/c/Users/B660/.pyenv/pyenv-win/shims/python: /bin/sh^M: bad interpreter: No such file or directory
-bash: /mnt/c/Users/B660/.pyenv/pyenv-win/bin/pyenv: /bin/sh^M: bad interpreter: No such file or directory
/mnt/c/Users/B660/.pyenv/pyenv-win/bin/pyenv: 3: cygpath: not found
/mnt/c/Users/B660/.pyenv/pyenv-win/bin/pyenv: 3: exec: cmd: not found
# 조치방법
- sudo nano ~/.bashrc 로 마지막에 아래 문구를 삽입
- <Win-username> 부분 2곳을 윈도우 계정이름으로 변경 (예로, Win-username >> B660)
- source ~/.bashrc 로 적용
export PYENV_ROOT="$HOME/.pyenv"
command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
BIN_OLD="/mnt/c/Users/<Win-username>/.pyenv/pyenv-win/bin"
BIN_NEW="$PYENV_ROOT/bin"
SHIMS_OLD="/mnt/c/Users/<Win-username>/.pyenv/pyenv-win/shims"
SHIMS_NEW="$PYENV_ROOT/shims"
export PATH=`echo $PATH | sed "s@$BIN_OLD@$BIN_NEW@" | sed "s@$SHIMS_OLD@$SHIMS_NEW@"`
eval "$(pyenv init -)"
https://stackoverflow.com/a/76483889/14103688
아래에 적은 방법들은 해봤지만 조치 안됨
$ ln -s [대상 경로] [링크 경로]
sudo ln -s original link
By default, pyenv executable can be found at $(pyenv root)/versions/{VERSION}/bin/python.
$ pyenv which python
/home/b660/.pyenv/versions/3.11.2/bin/python
# ERROR
-bash: /mnt/c/Users/B660/.pyenv/pyenv-win/shims/python: /bin/sh^M: bad interpreter: No such file or directory
-bash: /mnt/c/Users/B660/.pyenv/pyenv-win/bin/pyenv: /bin/sh^M: bad interpreter: No such file or directory
/mnt/c/Users/B660/.pyenv/pyenv-win/bin/pyenv: 3: cygpath: not found
/mnt/c/Users/B660/.pyenv/pyenv-win/bin/pyenv: 3: exec: cmd: not found
# To Fix
~$ which python
/mnt/c/Users/B660/.pyenv/pyenv-win/shims/python
# python >> python_ 으로 변경함
~$ mv /mnt/c/Users/B660/.pyenv/pyenv-win/shims/python /mnt/c/Users/B660/.pyenv/pyenv-win/bin/pyenv_
~$ which pyenv
/mnt/c/Users/B660/.pyenv/pyenv-win/bin/pyenv
# pyenv >> pyenv_ 으로 변경함
~$ mv /mnt/c/Users/B660/.pyenv/pyenv-win/bin/pyenv /mnt/c/Users/B660/.pyenv/pyenv-win/bin/pyenv_
# example
sudo ln -sf /home/<user name>/.pyenv/bin/pyenv /usr/bin/pyenv
# in WSL
sudo ln -sf /home/b660/.pyenv/versions/3.11.2/bin/python /usr/bin/python
sudo ln -sf /home/b660/.pyenv/versions/3.11.2/bin/pip /usr/bin/pip
sudo ln -sf /home/b660/.pyenv/bin/pyenv /usr/bin/pyenv
Remove the Current Python3 Symbolic Link
sudo rm /usr/bin/python3
sudo apt install python-is-python3
alias python="python3"
sudo ln -sf /usr/bin/python /usr/bin/python3
sudo ln -sf /usr/bin/python /usr/bin/python3.11
sudo nano ~/.bashrc
# in .bashrc, ADD alias
alias python="python3.11"
alias pip="pip3.11"
source ~/.bashrc
_____________________
echo "alias python={PATH_python3}" >> ~/.bashrc
echo "alias pip={PATH_pip3}" >> ~/.bashrc
https://www.makeuseof.com/set-up-python-for-development-on-wsl/
Reference
https://github.com/pyenv/pyenv/wiki/common-build-problems
https://thekkom.tistory.com/69
_