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

Вопрос или проблема

Что-то очень неправильно происходит с настройкой моего окружения. Поскольку я пытаюсь учиться, я решил переустановить 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
~ ❯

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

Скриншот терминала с путями 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 

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

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

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

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

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

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

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

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

Вы можете использовать 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.

Не могу сейчас придумать других проблем.

Ответ или решение

Ваша проблема с версией Python, возвращаемой при использовании оболочки ZSH, может быть связана с несколькими основными моментами. Давайте рассмотрим их более подробно.

Анализ вашей среды

  1. Проверка переменной окружения $PATH:
    Ваша переменная $PATH выглядит следующим образом:

    /Users/edchigliak/bin:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/edchigliak/bin

    Обратите внимание, что /usr/local/bin находится в начале пути, что логично, так как там установлен ваш Python 3 из Homebrew. Однако при вводе команды python --version возвращается результат для Python 2.7.10, что указывает на то, что система находит и исполняет Python 2 прежде, чем дойдет до Python 3.

  2. Расположение интерпретаторов Python:
    Существование нескольких интерпретаторов Python вполне нормально. Ваша система включает Python 2, установленный по умолчанию, и Python 3, установленный с помощью Homebrew. Однако для точного определения, какой исполняемый файл используется, полезно выполнить следующую команду:

    which python

    Эта команда покажет путь к исполняемому файлу, который вызывается при нажатии python. Если он указывает на /usr/bin/python, значит система использует старую версию Python 2.

Решения проблемы

1. Создание символической ссылки

Если вы хотите, чтобы команда python по умолчанию использовала Python 3, вы можете создать символическую ссылку. Это можно сделать, выполнив следующую команду:

sudo ln -s /usr/local/bin/python3 /usr/local/bin/python

Эта команда создаёт символическую ссылку, что позволяет вам запускать Python 3 с помощью команды python. Однако, учтите, что это может привести к несовместимостям с программным обеспечением, которое зависит от Python 2.

2. Использование функции или алиаса

Также вы можете создать алиас в вашем файле .zshrc, чтобы python указывал на python3. Добавьте следующее в .zshrc:

alias python=python3

Не забудьте перезагрузить ваш терминал или выполнить source ~/.zshrc, чтобы изменения вступили в силу.

3. Проверка прав доступа

Если файл /usr/local/bin/python существует, но не имеет прав на выполнение, выполните:

sudo chmod a+x /usr/local/bin/python

Это даёт разрешение на выполнение файла, что также может решить вашу проблему.

Взаимодействие с системным Python

Следует помнить, что прямой переход с Python 2 на Python 3 может вызвать проблемы с некоторыми системными инструментами или сторонними библиотеками, которые по-прежнему требуют Python 2. Поэтому, если вы работаете с проектами, которые зависят от Python 2, лучше указать версии явно в ваших проектах и использовать виртуальные окружения.

Заключение

Проблема с неправильной версией Python может быть вызвана многими факторами, включая конфигурацию вашего окружения и пути доступа к исполняемым файлам. Используя предоставленные методы, вы сможете настроить вашу среду так, как вам необходимо. Не забывайте тщательно проверять каждый шаг и корректировать конфигурации по мере необходимости.

Оцените материал
Добавить комментарий

Капча загружается...