wsl:: pyenv in wsl-ubuntu path error (pyenv-win in Windows)

 

 

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

 

 

# 조치방법

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 -)"

source ~/.bashrc  로 적용

 

 

 

https://stackoverflow.com/a/76483889/14103688

 

Installing pyenv-win on top of working wsl2 Ubuntu instance breaks Ubuntu pyenv

I've been using pyenv for the past year in my ubuntu 22.04 under wsl2. It works fine, and I have no issues with installing python versions and setting them up for a project. I now have a windows app

stackoverflow.com

 

 

 

 

 

 

 

 

 

 


아래에 적은 방법들은 해봤지만 조치 안됨

 

$ 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/

 

How to Set Up Python for Development on WSL

Get started with cross-platform Python programming by setting up Python on the Windows Subsystem for Linux.

www.makeuseof.com

 

 

 

 

 

 

 

 

 

https://askubuntu.com/questions/1170875/can-i-create-a-symlink-to-a-windows-executable-in-the-windows-subsystem-for-linu

 

 

 

 

 


https://github.com/pyenv/pyenv/wiki/common-build-problems

 

Common build problems

Simple Python version management. Contribute to pyenv/pyenv development by creating an account on GitHub.

github.com

 

 

 

 

 

 

 

_

반응형