Вернулась неправильная версия Python, с правильным значением $ PATH, установленным в ZSH

620
Alex Starbuck

что-то очень плохое происходит с моим окружением. Поскольку я пытаюсь учиться, я решил переустановить Mac OSX El Capitan на моем Macbook Pro и начать установку и настройку с нуля. Оболочка, которую я использую - ZSH, и я немного настроил ее с помощью Oh-My-ZShell.

Мой $ PATH и Python:

~ ❯ echo $PATH /Users/edchigliak/bin:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/edchigliak/bin ~ ❯ python --version Python 2.7.10 ~ ❯ 

Снимок экрана ниже ясно показывает, что в Python2 установлены два /usr/binи Homebrewed Python3 в /usr/local/bin.

Terminal screenshot of Python2 and Python3 paths

Вот результат printenv(только записи, связанные с PATH и SHELL):

PATH=/Users/edchigliak/bin:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/edchigliak/bin PWD=/Users/edchigliak SHELL=/usr/local/bin/zsh SHLVL=2 SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.lRGo5iu4NA/Listeners TERM=screen-256color ZSH=/Users/edchigliak/.oh-my-zsh __CF_USER_TEXT_ENCODING=0x1F5:0x0:0x0 _=/usr/bin/printenv 

Первая запись в моем.zshrc :

export PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/bin 

Большое спасибо!

0
Ничто из этого не называется буквально `python`, это команда, которую вы вводите. Что вы получаете с` type python`? tripleee 6 лет назад 0
@tripleee Привет, спасибо за быстрый ответ. Я получаю это `python is / usr / bin / python` Alex Starbuck 6 лет назад 0
Не совсем понятно, почему вы считаете этот результат "неправильным". tripleee 6 лет назад 1
Я думаю, что это неправильно, потому что я изменил `$ PATH` в файле` .zshrc` на `export PATH = / usr / local / bin: / usr / bin: / usr / local / sbin: / usr / sbin` и подумал тот `который python` должен теперь возвращать python 3xx Alex Starbuck 6 лет назад 0
Не должно; только `какой python3.xx` может вернуть этот результат. tripleee 6 лет назад 0

1 ответ на вопрос

0
tripleee

При вводе в приглашении оболочки pythonбудут учитываться только имена двоичных файлов python.

Если вы хотите pythonвыполнить python3, простой способ сделать это - установить функцию или псевдоним в ваших личных файлах запуска оболочки.

Вы абсолютно не должны делать pythonупор на python3общесистемную, потому что это сломает некоторые ОС и сторонние инструменты, которые должны pythonбыть Python версии 2. Оба являются взаимно несовместимыми языками (или диалектами, если вы предпочитаете).

Чтобы посмотреть, что здесь происходит, когда вы набираете commandв приглашении, оболочка перебирает все каталоги в вашем PATHи ищет исполняемый файл, названный точно commandв каждом, пока не найдет один или не исчерпает места для поиска. Он будет просто игнорировать любые файлы с другими именами, даже если они окажутся похожими, как xcommandили commandanteили или command3.xx. Если у вас есть псевдоним или функция, она будет использоваться вместо этого, хотя PATH, возможно, вам будет предложено найти другие команды, вызываемые вашим псевдонимом или функцией.

Я понимаю эту часть, но я не понимаю, почему: «какой python» возвращает системную единицу, хотя я изменил переменную $ PATH в своем файле .zshrc? Кроме того, почему запись `PATH` в выходных данных` printenv` установлена ​​на этот смехотворно длинный путь вместо того, который я установил в .zshrc? Спасибо! Alex Starbuck 6 лет назад 0
Вероятно, другие части ваших файлов запуска `zsh` изменяют путь с помощью чего-то вроде` PATH = $ HOME / bin: PATH`. Конечно, это необходимо сделать только один раз. Но здесь это не имеет прямого отношения и вообще не упоминается в вашем актуальном вопросе. tripleee 6 лет назад 0

Похожие вопросы