Pyenv не может обнаружить установленные версии Python в MacOS Catalina

У меня MacOS Catalina, и я сделал brew install последнюю версию python 3.8.5. Затем я обнаружил pyenv и также установил его. Я выполнил шаги на https://github.com/pyenv/pyenv#basic-github-checkout из номера 3, но по-прежнему не видит никаких версий Python в pyenv.

У меня есть файлы .zprofile и .zshrc, и мне интересно, вызывает ли это проблемы. Вот мой echo $PATH -

/Users/pq0252/.pyenv/shims/shims:/Users/pq0252/.pyenv/shims/shims:/Users/pq0252/.pyenv/shims:/Library/Frameworks/Python.framework/Versions/3.8/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin 

Вот вывод версии pyenv:

pyenv versions
* system (set by /Users/pq0252/.pyenv/shims/version) 

Вот содержимое .zprofile -

 #Setting PATH for Python 3.8.   
 #The original version is saved in .zprofile.pysave.   
PATH="/Library/Frameworks/Python.framework/Versions/3.8/bin:${PATH}"   
export PATH 

Вот содержимое .zshrc (похоже, это повторяет условие if, хотя я добавил его только один раз, и я думаю, что это как-то связано с шагом 3 на pyenv github, где мы добавляем к нему?).

export PYENV_ROOT="$HOME/.pyenv/shims"
export PATH="$PYENV_ROOT:$PATH"
export PIPENV_PYTHON="$PYENV_ROOT/python"
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\n$
if command -v pyenv 1>/dev/null 2>&1; then
  eval "$(pyenv init -)"
fi
if command -v pyenv 1>/dev/null 2>&1; then
  eval "$(pyenv init -)"
fi

Должен ли я удалить записи в .zshrc и вместо этого добавить все в .zprofile или я что-то еще упускаю? python3 --version показывает 3.8.5.


person linuxNoob    schedule 20.08.2020    source источник
comment
Вы установили версию pyenv, запустив pyenv install python_version_to_install?   -  person harryghgim    schedule 20.08.2020
comment
@harryghgim Я использовал brew для его установки, следуя отсюда - github.com/pyenv/pyenv#installation   -  person linuxNoob    schedule 20.08.2020


Ответы (1)


Вот что я вижу, когда запускаю pyenv versions

➜  ~ pyenv versions
* system (set by /Users/gwanghyeongim/.pyenv/version)
  3.7.6
  3.7.7

И это то, что у меня есть в моем файле .zshrc.

# pyenv config
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
if command -v pyenv 1>/dev/null 2>&1; then
  eval "$(pyenv init -)"
fi

Ваши PYENV_ROOT и PATH в .zshrc выглядят странно. Согласно руководству по установке, они должны выглядеть примерно так, как показано выше. Сделайте их, как указано выше.

Кажется, вместо того, чтобы запускать echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.zshrc в терминале, вы помещаете его напрямую в .zshrc. Удалите блок кода, начинающийся с echo -e, и вместо этого запустите код в терминале. Тогда ваш .zshrc будет выглядеть так, как показано выше.

Теперь попробуйте запустить pyenv install version_to_install, где version_to_install — это python, который вы хотите установить с помощью pyenv. Например

pyenv install 3.7.7

Затем он установит конкретную версию. После установки снова запустите pyenv versions и посмотрите, видите ли вы установленную версию Python в списке.

person harryghgim    schedule 20.08.2020
comment
Итак, я уже установил python 3.8.5, используя brew, и я просто хочу, чтобы pyenv ссылался на него, я не хочу его переустанавливать. - person linuxNoob; 20.08.2020
comment
Я получаю /Users/pq0252/.pyenv/shims:/Users/pq0252/.pyenv/bin:/Library/Frameworks/Python.framework/Versions/3.8/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin в echo $PATH после внесения предложенных вами изменений, но я все еще не вижу pyenv versions, показывающего версию Python. - person linuxNoob; 20.08.2020
comment
@linuxNoob Установка pyenv с brew и установка отдельной версии Python с pyenv install python_version — это две разные вещи. Я говорю вам запустить команду pyenv install (которая установит отдельную версию Python), а не brew install (которая установит само программное обеспечение pyenv) - person harryghgim; 20.08.2020
comment
Я говорю, что установил python 3.8.5, используя brew, до того, как установил pyenv, используя brew. - person linuxNoob; 20.08.2020
comment
если вы хотите видеть 3.8.5 при запуске pyenv versions, вам нужно установить его с помощью pyenv install. Системные версии Python (версия, которая у вас уже есть до установки pyenv) будут отображаться как system. Я использую Python 3.8.5, установленный brew, и это мой системный Python. - person harryghgim; 20.08.2020
comment
звучит так, что я могу смело предположить, что версия 3.8.5 тогда? - person linuxNoob; 20.08.2020
comment
@linuxNoob Да. pyenv не имеет ничего общего со ссылкой на системную версию Python. Когда вы запускаете python --version, вы видите, что ваша версия Python установлена. Если вы хотите увидеть, на что ссылается эта версия Python, запустите which python3, тогда он покажет путь интерпретатора версии Python примерно так: /Users/gwanghyeongim/.pyenv/shims/python3 - person harryghgim; 20.08.2020
comment
У меня сложилось впечатление, что pyenv изменит версию системы по мере необходимости, но похоже, что нет. Не уверен, что тогда это будет полезно. - person linuxNoob; 20.08.2020
comment
@linuxNoob Не так, если вы не установите отдельную версию Python, чтобы использовать ее с отдельной зависимостью, такой как virtualvenv, для конкретного проекта версии Python. - person harryghgim; 20.08.2020
comment
поэтому, если я установлю что-то, для чего требуется Python, скажем, Airflow, будет ли он по умолчанию использовать версию Python в моей системе? В моей системе python --version 2.7.16 - person linuxNoob; 20.08.2020
comment
Похоже, что pyenv полезен только в том случае, если я использую его для установки python, в противном случае это бессмысленно. - person linuxNoob; 20.08.2020
comment
Вы можете установить другую версию либо глобально, запустив pyenv global python_version, либо локально в папке вашего проекта, запустив pyenv local python_version. Airflow устанавливается как пакет python, поэтому, если вы установите конкретную версию python, в которой будет установлен Airflow, сделаете virtualvenv или venv и установите Airflow в этой виртуальной среде, pyenv может удовлетворить ваши потребности. - person harryghgim; 20.08.2020
comment
pyenv global 3.8.5 выдает, что версия 3.8.5 не установлена. Я не уверен, что делает virtualenv, нужно разобраться. - person linuxNoob; 20.08.2020
comment
Я предлагаю вам изучить зависимости Python, такие как virtualvenv, venv или mkvirtualenv, вместе с pyenv. Установка версии python — это работа pyenv, а разделение проектов, в которых установлены пакеты python, — работа зависимостей. - person harryghgim; 20.08.2020
comment
Перед запуском pyenv global или pyenv local убедитесь, что у вас установлена ​​версия Python. Кроме того, вам не нужен pyenv global 3.8.5, поскольку ваша версия Python по умолчанию — 3.8.5 во всем мире, если вы не указали иное. - person harryghgim; 20.08.2020
comment
pyenv global дает систему, но python --version дает 2.7.16 - person linuxNoob; 20.08.2020
comment
А как насчет python3 --version? - person harryghgim; 20.08.2020
comment
Это дает 3.8.5 - person linuxNoob; 20.08.2020