macOS가 pyenv 버전 2.77을 사용해도 시작된 문제 해결

10452 단어 PythonMacOSpyenvtech
macOS에서 pyenv를 사용할 때 최신 버전을 사용하거나 구 버전을 사용하는 사람이 많다.
이번에 pyenv에 새 버전의python을 설치했지만 맥OS 표준의 2.7.17은 이미 시작 문제를 해결했기 때문에 먼저 적어 두었습니다.

컨디션

  • macOS Big Sur 11.6.2
  • pyenv 2.2.3
  • python 3.10.1
  • pyenv는 홈brew로 설치되어 있으며 설치할 때의 상세한 상황은 알 수 없습니다.

    현상.


    pyenv에서version과versions가 올바르게 실행된 것처럼 보이지만 글로벌에서는 3.10.1을 지정해도 시작은 2.717로 바뀌었다.
    iMac20-27:~ paraches$ pyenv versions
      system
    * 3.10.1 (set by /usr/local/var/pyenv/version)
      3.7.4
      3.7.4/envs/PyCharm
      3.8.3
      3.9.4
      PyCharm
    iMac20-27:~ paraches$ pyenv version
    3.10.1 (set by /usr/local/var/pyenv/version)
    iMac20-27:~ paraches$ python -V
    Python 2.7.17
    

    해결책


    .zshrc에 eval "$(pyenv init --path)".
    .zshrc
    export PYENV_ROOT=/usr/local/var/pyenv
    eval "$(pyenv init -)"
    eval "$(pyenv init --path)"
    
    이렇게 되면 자신의 환경에서 글로벌로 설정된python이 시작됩니다.
    iMac20-27:~ paraches$ python -V
    Python 3.10.1
    
    다음은 문제를 해결할 때의 기록이다.

    문제 해결 기록


    먼저 pyenv의 구조를 확인하세요.
    https://github.com/pyenv/pyenv#readme
    How It Works를 볼 때 MacOS가 명령을 실행할 때 PATH의 왼쪽에서 순서대로 명령의 위치를 찾기 때문에 pyenv는 시스템의pythn을 찾기 전(왼쪽)에 pyenv를 가리키는 shims의 경로$(pyenv root)/shims를 삽입하여 명령을 가로로 찾습니다.
    따라서 PATH를 확인합니다.
    iMac20-27:~ paraches$ pyenv root
    /usr/local/var/pyenv
    iMac20-27:~ paraches$ echo $PATH
    /Users/paraches/.rbenv/shims:/Users/paraches/.pyenv/shims:/Users/paraches/.nodebrew/current/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin
    
    pyenv의 루트는 /usr/local/var/pyenv이지만 /usr/local/var/pyenv/shims가 없다.
    대체적으로/Users/paraches/.pyenv/shims가 있지만 자신의 시스템에/Users/paraches/.pyenv/shims의 디렉터리가 없다.
    그래서 이번 문제의 원인은 PATH가 통과하지 못했기 때문이다.

    .zshrc。소개 내용


    그러면 pyenv의 PATH 스크립트를 어떻게 설정해야 좋을까요?
    https://github.com/pyenv/pyenv#automatic-installer
    위쪽을 보면 맥OS에 zsh가 있는 경우 아래 명령을 실행하면 기록됩니다.
    이건zprile에서eval "$(pyenv init --path)".zshrc에만 eval "$(pyenv init -)".
    먼저 각자 잘 썼는지 확인한다.
    .zprofile
    echo 'eval "$(pyenv init --path)"' >> ~/.zprofile
    
    echo 'eval "$(pyenv init -)"' >> ~/.zshrc
    
    .zshrc
    export PATH=$HOME/.nodebrew/current/bin:$PATH
    
    README의 거리가 되지 않았습니다.
    . zshrc에서 pyenv init -를 포함하는 줄을 삭제하고 두 명령을 실행합니다.및 zprofilezshrc를 고칩니다.
    .zprofile
    export PYENV_ROOT=/usr/local/var/pyenv
    if which pyenv > /dev/null; then eval "$(pyenv init -)"; fi
    
    if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi
    
    .zshrc
    export PATH=$HOME/.nodebrew/current/bin:$PATH
    eval "$(pyenv init --path)"
    
    새 터미널 확인 동작을 엽니다.
    export PYENV_ROOT=/usr/local/var/pyenv
    eval "$(pyenv init -)"
    
    if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi
    
    안돼...
    PATH 확인해 볼게요.
    iMac20-27:~ paraches$ python -V
    Python 2.7.17
    
    부터 shims까지의 PATH는 여전히 /Users/paraches/.pyenv/shims였다.

    pyenv init--path란?


    그래서 여기 PATH와 관련된pyenv init --path 뭘 하고 있는지 확인해 보자.
    pyenv의 Advanced Configuration 항목에 표시됩니다.
    https://github.com/pyenv/pyenv#advanced-configuration
    이 명령을 사용하여 shims에 대한 경로를 설정할 수 있습니다.
    지령을 해 보세요.
    iMac20-27:~ paraches$ echo $PATH
    /Users/paraches/.rbenv/shims:/Users/paraches/.pyenv/shims:/Users/paraches/.nodebrew/current/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin
    
    는 PATH에 실제 shims에 추가하는 스크립트를 보여줍니다.
    원래는zprofile로 읽은 eval "$(pyenv init --path)" 명령은 shims 경로로 설정해야 하는데, 왜 작동하지 않는지...
    해봐.zprofile에서 pyenv init --path 실행할 때 export PATH="Users/paraches/.pyenv/shims:${PATH}" 표시됩니다.아니오usr/local/var/pyenv/shims.왜?pyenv init -에서 pyenv의 루트를 설정하시겠습니까?그러니먼저안하면 안돼?
    그래서그만 써.zshrc에 eval "$(pyenv init --path)"를 추가합니다.
    .zshrc
    iMac20-27:~ paraches$ pyenv init --path
    export PATH="/usr/local/var/pyenv/shims:${PATH}"
    
    새 터미널을 시작하고 확인합니다.
    export PYENV_ROOT=/usr/local/var/pyenv
    eval "$(pyenv init -)"
    eval "$(pyenv init --path)"
    
    if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi
    
    글로벌에 설정된 3.10.1이 시작됩니다!
    PATH 확인해 볼게요.
    iMac20-27:~ paraches$ python -V
    Python 3.10.1
    
    잘 넣었다/usr/local/var/pyenv/shims.
    아직 남아있어서/Users/paraches/.pyenv/shims 징그러워.zprofile의 eval "$(pyenv init --path)" 를 미리 삭제합니다.
    새 터미널 확인을 다시 시작합니다.
    iMac20-27:~ paraches$ echo $PATH
    /Users/paraches/.rbenv/shims:/usr/local/var/pyenv/shims:/Users/paraches/.pyenv/shims:/Users/paraches/.nodebrew/current/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin
    
    이렇게 /Users/paraches/.pyenv/shims 사라졌어요.

    최후


    왜?zprofile 실행 eval "$(pyenv init --path)" 으로 정확한 경로를 표시하지 않는 것은 수수께끼입니다. 어쨌든.zshrc에 모두 쓰면 작동합니다.
    결국, 나는 pyenv를 설치할 때 무엇을 했는지 생각했다.앞으로는 묵인과는 다른 일을 할 때 했던 일을 잘 이해하고 했던 일을 명심하겠습니다.

    좋은 웹페이지 즐겨찾기