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

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

Что-то очень не так с моей настройкой среды. Пока я пытаюсь учиться, я решил переустановить 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и самодельный Python3 в /usr/local/bin.

Скриншот терминала путей Python2 и Python3

Вот результат 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 

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

решение1

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

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

Ни в коем случае не следует указывать pythonобщесистемный python3уровень, поскольку это нарушит работу некоторых ОС и сторонних инструментов, для которых требуется pythonPython версии 2. Это два взаимно несовместимых языка (или диалекта, если вам так больше нравится).

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

решение2

Оболочка ищет PATH дляточные совпадения. Когда вы вводите python, он пытается найти исполняемый файл, соответствующий ^python$; ^python...$это не одно и то же.

В вашем случае это может быть связано с тем, что в /usr/local/bin нет python или есть проблема с правами доступа, из-за чего он будет пропущен.

1) Если нет pythonв /usr/local/bin:

Вы можете использовать sudo ln -s /usr/local/bin/python3.6 /usr/local/bin/pythonдля создания мягкой ссылки python, указывающей на интерпретатор Python, который вы хотите использовать. Поскольку /usr/local/bin ищется первым для вашего PATH, оболочка теперь должна найти эту ссылку.

2) Если файл существует, /usr/local/binно не имеетвыполнятьразрешение, попробуйте sudo chmod a+x /usr/local/bin/python.

Сейчас не могу вспомнить другие проблемы.

Связанный контент