Pyenv не может переключать версии Python - PullRequest
0 голосов
/ 17 октября 2019

У меня установлен pyenv, однако он не выполняет свою основную функцию, а именно переключение версий Python. Следующие команды терминала демонстрируют это.

the file `main.py` is equivalent to:
import sys
print (sys.version)

Admins-MacBook-Pro-4:kylefoley kylefoley$ pyenv versions
  system
* 2.7.14 (set by PYENV_VERSION environment variable)
  3.5.3
  3.6.1
  3.7.3
  pypy3.6-7.1.1
Admins-MacBook-Pro-4:kylefoley kylefoley$ pyenv global 3.5.3
Admins-MacBook-Pro-4:kylefoley kylefoley$ pyenv exec python main.py
2.7.14 (default, Oct 17 2019, 00:01:43) 

Как вы можете видеть, когда я запускаю main.py, выходит версия 2.7. У многих людей есть эта проблема. Одним из распространенных решений является добавление

eval "$(pyenv init -)"

в bash_profile, который я сделал, и это не помогло. Здесь Невозможно переключить Python с помощью pyenv , рекомендуется:

Поместите переменные PATH и оболочки в ваш .bash_profile (или любой файл, используемый вашим дистрибутивом).

Но о каком PATH и о какой среде оболочки он говорит?

Также мой файл .bashrc выглядит так:

export PATH="/Users/kylefoley/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

Любая помощь будет принята с благодарностью. Еще одна вещь, когда я запускаю следующие команды, я получаю следующий вывод:

Admins-MacBook-Pro-4:kylefoley kylefoley$ python
Python 3.6.1rc1 (default, Mar  4 2017, 22:58:58) 

Ответы [ 2 ]

1 голос
/ 29 октября 2019

Проблема в том, что .bashrc не является source d в режиме без регистрации .

Инициализированные файлы для Bash:

  • режим входа в систему :
    • /etc/profile
    • ~/.bash_profile, ~/.bash_login, ~/.profile (только первый из существующих)
  • интерактивный без регистрации :
    • /etc/bash.bashrc (некоторые Linux; не в Mac OS X)
    • ~/.bashrc
  • неинтерактивный :
    • исходный файл в $BASH_ENV

А в macOS открыта оболочка Bash по умолчаниютерминальным приложением является интерактивная оболочка входа в систему, но в Linux оболочкой по умолчанию, открываемой терминальным приложением, является интерактивная оболочка без входа в систему.

Решение

Странный интерактивный вход без регистрациитребование загрузки смущает людей и в других ситуациях. Лучшее решение - изменить требование загрузки ~/.bashrc на только для интерактивных , что в точности соответствует большинству дистрибутивов Linux.

# write content below into ~/.bash_profile

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
    fi
fi

Этодолжно быть решение, которое вы хотите. И я рекомендую каждому пользователю Bash настроить это в своем профиле.

Ссылки

0 голосов
/ 17 октября 2019

Все было сделано правильно, просто я думал, что команда терминала . ~/.bash_profile обновляет профиль bash без необходимости закрывать терминал или открывать новый, чтобы изменения вступили в силу. Оказывается, . ~/.bash_profile обновляет только часть bash_profile. После перезапуска терминала все заработало как и планировалось.

...