C:\python>python --version Python 3.11.0
Для обращения к версии 3.10 (и всем другим версиям) необходимо использовать указывать номер версии:
C:\python>py -3.10 --version Python 3.10.9
например, выполнение скрипта hello.py с помощью версии 3.10:
py -3.10 hello.py
Подобным образом можно вызывать и другие версии Python.
MacOS
На MacOS можно установить разные версии, например, загрузив с официального сайта пакет установщика для определенной версии.
Для обращения к определенной версии Python на MacOS указываем явным образом подверсию в формате python3.[номер_подверсии] . Например, у меня установлена версия Python 3.10. Проверим ее версию:
python3.10 --version
Аналогично обращении к версии python3.9 (при условии если она установлена)
python3.9 --version
К примеру выполнение скрипта hello.py с помощью версии python 3.10:
python3.10 hello.py
Linux
На Linux также можно установить одновременно несколько версий Python. Например, установка версий 3.10 и 3.11:
sudo apt-get install python3.10 sudo apt-get install python3.11
Одна из версий является версий по умолчанию. И для обращения к ней достаточно прописать python3 , например, проверим версию по умолчанию:
python3 --version
Для обращения к другим версиям надо указывать подверсию:
python3.10 --version python3.11 --version
Например, выполнение скрипта hello с помощью версии Python 3.10:
python3.10 hello.py
Но может сложиться ситуация, когда нам надо изменить версию по умолчанию. В этом случае применяется команда update-alternatives для связывания определенной версии Python с командой python3. Например, мы хотим установить в качестве версии по умолчанию Python 3.11. В этом случае последовательно выполним следующие команды:
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 1 sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 2
Числа справа указывают на приоритет/состояние. Так, для версии 3.11 указан больший приоритет, поэтому при обращении к python3 будет использоваться именно версия 3.11 (в моем случае это Python 3.11.0rc1)

С помощью команды
sudo update-alternatives --config python3
можно изменить версию по умолчанию
Как установить другую версию python
У меня стоит pyhton 3.8 . Но мне нужно установить pyhton 3.7 (на то есть причины). Нужно ли мне удалять pyhton 3.8 , чтобы сделать это, и если нужно то как? Если что у меня операционная система Linux и модель Linux Mint 18 .
Отслеживать
49.3k 17 17 золотых знаков 57 57 серебряных знаков 101 101 бронзовый знак
задан 29 мая 2020 в 18:02
Kate Adams Kate Adams
17 1 1 серебряный знак 4 4 бронзовых знака
Не модель, а дистрибутив
29 мая 2020 в 18:03
Можно через pip поставить всё что угодно и каких угодно версий в домашний каталог.
29 мая 2020 в 23:57
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Но мне нужно установить pyhton 3.7
Устанавливайте на здоровье. Только не "руками", а системным установщиком пакетов. Что там у вас - dnf / zypper / yum.
Нужно ли мне удалять pyhton 3.8
На самом деле, Вам нужно разобраться с тем, какая программа на питоне какой конкретный интерпретатор питона использует. До сих пор есть много приложений, которые написаны для питона 2.7
Если все Ваши скрипты будут использовать 3.7, то проще всего, в каталоге /usr/bin/ выполнить команду:
sudo ln -s python3.7 python
Тогда все обращения к интерпретатору питона будут вызывать именно версию 3.7.
Но это довольно рискованный путь. В системе есть куча файлов на питоне и решать за всех - не стоит.
Если же Вам просто нужно, что бы конкретно Ваши программы исполнялись в версии 3.7, то пропишите это явно в каждой вашей программе в первой строке так:
#!/usr/bin/python3.7
и всё будет именно так, как Вы хотите.
Установка нескольких версий Python в Windows с помощью Virtualenv
Если у вас уже есть некоторые виртуальные среды или вы используете Anaconda, убедитесь, что следующие шаги выполняются извне всех этих сред.
2. Установите Python
Вы можете скачать Python с официального сайта, например, python3.7.3 здесь.
Файл, который вы должны загрузить, называется Windows x86–64 executable installer , или, Windows x86 executable installer если по какой-то причине вы используете 32-битные окна.
После завершения загрузки откройте исполняемый файл и появится приглашение для установки.

- Вы НЕ хотите добавлять новый python в вашу PATH, поскольку у нас будет несколько версий python на одном компьютере, и мы хотим, чтобы каждое приложение знало только одну версию python.
- Либо используйте предложенное по умолчанию местоположение для нового питона, либо укажите местоположение по вашему выбору. В любом случае, запомните это место, и давайте теперь будем обозначать его C:\ \Python37 .
3. Создать virtualenv
Откройте Command Prompt , или, если вы используете Anaconda, откройте Anaconda Prompt .
Решите , где вы хотите хранить virtualenv, например,
C:\Users\ \Anaconda3\envs\ .
virtualenv C:\Users\\Anaconda3\envs\ -p C:\\Python37\python.exe
4. Обновите интерпретатор PyCharm
Если вы используете PyCharm, откройте проект, над которым вы хотели бы поработать (то есть / будет написано с новой версией Python), и затем File -> Settings -> Project -> Project Interpreter нажмите значок шестеренки, а затем Add.. .

Откроется окно с подсказкой, которое позволит вам определить нового интерпретатора:

Предполагая, что вы используете проверку кода, вам может потребоваться указать PyCharm, какую версию Python проверять. Перейдите File -> Settings-> Editor -> Inspections -> Python -> Code compatibility Inspection , убедитесь, что поле вверху указывает на конкретный проект, над которым вы работаете, и отметьте поле вашей версии Python.

Если вы не видите свою версию Python в списке параметров, возможно настала пора для обновления PyCharm . да, со мной тоже случилось .
5. Установите пакеты
В настоящее время ваш virtualenv содержит только важные пакеты, pip и setuptools . Чтобы установить больше пакетов:
- Откройте Command Prompt или Anaconda Prompt , и активируйте свой virtualenv, введя
C:\Users\ \Anaconda3\envs\ \activate.bat
- Используйте pip для установки пакетов, как вы обычно делаете.
- Деактивировать свой virtualenv, введя deactivate .
Установка нескольких версий Python параллельно при помощи pyenv
В большинстве операционных систем Python предустановлен (ну, кроме Windows, но даже там теперь есть команда python , которая предложит установить интерпретатор из магазина приложений). В Unix-подобных операционных системах, таких как Linux и MacOS, Python пустил корни очень глубоко. Множество компонентов ОС рассчитывают, что Python установлен и работает стабильно. Это и хорошо, и плохо.
Это хорошо, потому что хотя бы какой-то Python в большинстве систем доступен из коробки — бери и пользуйся. Иногда доступно сразу несколько версий интерпретатора, например, python2 указывает на устаревшую версию 2.7, python3 — на какую-нибудь стабильную версию Python 3, типа 3.6 или 3.7, а просто python указывает либо на одно, либо на другое (в последнее время предпочтение чаще отдаётся третьей версии). Для обучения или для тестирования этого может быть вполне достаточно.
С другой стороны, это плохо, потому что, как правило, предустановленный Python настолько стабилен, что уже успел зарасти мхом. В некоторых системах до сих пор предустановлен только Python 2, но даже если вам повезёт получить Python третьей версии, то наверняка он будет отставать от последней версии на пару минорных релизов. Не факт, что вам это подойдёт.
Иногда нужно иметь сразу несколько версий Python для работы над разными проектами, например, 3.7 и 3.8. В некоторых ОС нужные версии можно установить через пакетный менеджер (например, в Fedora через dnf) — из основных репозиториев или из сторонних. Но зачастую такие репозитории содержат не все релизы интерпретаторов, а лишь выбранное мейнтейнерами репозиториев подмножество.
Решение у всех этих проблем одно — нужно установить недостающие версии интерпретатора, какими бы они ни были. Этому и посвящён пост.
pyenv
pyenv — утилита, которая позволяет легко переключаться между несколькими версиями интерпретатора Python, а также устанавливать новые. Позволяет устанавливать, наверное, вообще все известные науке версии интерпретаторов Python. Работает просто и незаметно.
pyenv — это всего лишь один из последователей аналогичного инструмента из мира Ruby — rbenv . Есть ещё и nodenv для Node.js, который тоже вдохновился rbenv .
Проект написан целиком на bash . Это значит, что он никак не зависит от Python — было бы забавно, если бы для установки Python нужен был бы Python. Также это означает, что на Windows pyenv работать не будет (тред с обсуждением). Следует отметить, что в Windows проблема установки нескольких версий и не возникает — там всегда можно скачать и установить сколько угодно интерпретаторов с официального сайта, а pylauncher поможет выбрать из них нужную версию. Кроме того, пользователи современных версий Windows могут использовать pyenv внутри WSL (Windows Subsystem for Linux). Ещё это означает, что у авторов много отваги — я бы не решился писать на bash что-то настолько сложное. Как же хорошо, что всё уже написано.
Установка
- Скачаем pyenv . Установка pyenv производится простым клонированием git-репозитория. У проекта есть умный скрипт, который скачает pyenv и его сотоварищей:
$ curl https://pyenv.run | bash
WARNING: seems you still have not added 'pyenv' to the load path. # Load pyenv automatically by adding # the following to ~/.bashrc: export PATH="~/.pyenv/bin:$PATH" eval "$(pyenv init -)" eval "$(pyenv virtualenv-init -)"
В случае с zsh нужно будет добавить те же самые строки в ~/.zshrc . В случае с fish в связи с особенностями самого шелла инструкции отличаются:
# Load pyenv automatically by adding # the following to ~/.config/fish/config.fish: set -x PATH "~/.pyenv/bin" $PATH status --is-interactive; and . (pyenv init -|psub) status --is-interactive; and . (pyenv virtualenv-init -|psub)
$ pyenv --version pyenv 1.2.18
Как это работает
pyenv работает благодаря манипуляциям над переменной окружения $PATH . Эта переменная содержит в себе список директорий, в которых ОС будет искать исполняемые файлы, вызванные без указания полного пути. Именно благодаря этой переменной мы можем в терминале вместо /bin/cat вызывать просто cat . Когда мы набираем в терминале имя программы ( cat ), ОС перебирает директории из $PATH слева направо, пока в одной из них (в данном примере /bin ) не найдёт программу с именем cat , которую и запустит. Поиск прекращается после первого совпадения.
Команда pyenv init - , которую мы добавили в конфиг шелла ( .bashrc или аналог) добавляет директории pyenv в самое начало переменной $PATH . Зачем это нужно? pyenv создаёт небольшие исполняемые файлы, так называемые файлы-прослойки (shims), для всех команд, которыми он собирается управлять, например, python , pip , ipython и так далее. Эти файлы-прослойки должны попасть в $PATH прежде самих управляемых программ и "затенить" системные python , pip и так далее. Эти файлы-прослойки в конечном счёте просто вызывают сам pyenv с нужными аргументами. Таким образом pyenv перехватывает обращения к некоторым именам, и анализируя поступившую к нему информацию, принимает решение о том, какую именно версию Python нужно запустить. При выборе версии pyenv принимает во внимание следующие факторы в указанном порядке:
- Переменная окружения PYENV_VERSION , если указана. В неё можно указать какую конкретно версию Python нужно использовать в рамках текущего сеанса. Удобно, если вам по какой-то причине понадобится сменить выбранную версию интерпретатора, например, в одном из окон терминала.
- Локальная версия Python. При помощи специального файла .python-version можно настроить версию интерпретатора для определенного проекта. Захо́дите внутрь директории ( cd project/ ), и pyenv внезапно понимает, что нужно сменить Python. Выхо́дите обратно — версия Python меняется на глобальную. Это распространяется и на все поддиректории проекта — pyenv рекурсивно ищет файл .python-version вверх по файловой системе, пока не дойдёт до корня.
- Глобальная версия Python. В файле ~/.pyenv/version записана глобальная версия Python, которая будет использоваться по умолчанию, если не сконфигурирована локальная версия.
Вам вряд ли придётся вручную трогать эти файлы, потому что у pyenv есть удобные команды ( pyenv local и pyenv global ), чтобы ими управлять, но знать о файлах всё равно полезно.
Использование
Установка новой версии Python
Сначала посмотрим, какие версии Python pyenv может установить:
$ pyenv install --list . 3.6.0 3.6-dev 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.6.8 3.6.9 3.6.10 3.7.0 3.7-dev 3.7.1 3.7.2 3.7.3 3.7.4 3.7.5 3.7.6 3.7.7 3.8.0 3.8-dev 3.8.1 3.8.2 3.9.0a6 3.9-dev .
Список довольно длинный, поэтому я его подсократил. Обычно вас будут интересовать такие версии, как 3.8.2 или 3.7.7 — это версии самой распространённой реализации интерпретатора CPython. Но если вам нужна экзотика, то pyenv умеет устанавливать любые сорта интерпретаторов Python ( pypy3.6-7.3.0 , stackless-3.7.5 , jython-2.7.1 , ironpython-2.7.7 , micropython-1.12 и т.д.). Для вас ведь не стало новостью, что существует много разных реализаций интерпретатора Python?
Установим CPython 3.8.2:
$ pyenv install 3.8.2 Downloading Python-3.8.2.tar.xz. Installing Python-3.8.2.
Через пару минут ожидания ваш новоиспечённый Python будет готов.
Можно сразу же назначить эту версию глобальной:
$ pyenv global 3.8.2 $ python -V Python 3.8.2
Давайте в целях демонстрации установим ещё парочку интерпретаторов:
$ pyenv install 2.7.18 $ pyenv install 3.9.0a6
Получим список установленных версий интерпретатора:
$ pyenv versions 2.7.18 * 3.8.2 (set by /home/br0ke/.pyenv/version) 3.9.0a6
Кстати, если нужно, то можно делать активными сразу несколько версий одновременно:
$ pyenv global 3.8.2 2.7.18
Теперь вывод версий покажет следующее:
$ pyenv versions * 2.7.18 (set by /home/br0ke/.pyenv/version) * 3.8.2 (set by /home/br0ke/.pyenv/version) 3.9.0a6
А работать это будет вот таким образом:
$ python -V Python 3.8.2 $ python3 -V Python 3.8.2 $ python2 -V Python 2.7.18
Грубо говоря, та версия, которая указана первой (3.8.2), имеет приоритет и занимает все нужные ей имена. Следующие версии (2.7.18) могут занять любые оставшиеся свободные имена (в данном случае, это только имя python2 ).
А файл глобальной версии ~/.pyenv/version на данный момент имеет вот такое содержимое:
$ cat ~/.pyenv/version 3.8.2 2.7.18
Локальная версия
Давайте создадим директорию и войдём в неё:
$ mkdir my_project $ cd my_project
Представим, что в этой директории мы будем разрабатывать некий проект, на котором мы хотим опробовать фишки нового Python 3.9. Сообщим об этом pyenv :
$ pyenv local 3.9.0a
В директории появился файл .python-version со следующим содержимым:
$ cat .python-version 3.9.0a6
На данный момент список версий показывает следующее (удобно использовать эту команду, чтобы понять какую версию и почему pyenv активирует):
$ pyenv versions 2.7.18 3.8.2 * 3.9.0a6 (set by /home/br0ke/my_project/.python-version)
Изменения немедленно вступили в силу:
$ python -V Python 3.9.0a6
Но эта конфигурация никак не влияет на работу pyenv вне директории проекта:
$ cd .. $ python -V 3.8.2
Как и в случае с глобальной конфигурацией, можно локально активировать сразу несколько версий интерпретатора.
Установим IPython
Часто бывает нужно установить какой-нибудь пакет так, чтобы он тоже стал доступен из командной строки. Допустим, что нам нужно установить ipython — более удобную версию REPL Python. Сделаем это:
$ cd my_project $ pip install ipython
$ ipython Python 3.9.0a6 (default, May 3 2020, 16:58:20) Type 'copyright', 'credits' or 'license' for more information IPython 7.14.0 -- An enhanced Interactive Python. Type '?' for help. In [1]:
Программа сразу доступна, благодаря тому, что pyenv очень умный и создал новый файл-прослойку (shim) автоматически:
$ which ipython /home/br0ke/.pyenv/shims/ipython
Вне директории с проектом ipython будет недоступен, ведь он же установлен в локальный интерпретатор 3.9.0a6 , а снаружи активирован другой интерпретатор — можете проверить самостоятельно.
Возникают ситуации, когда по какой-то причине прослойка не создалась или с ней случилось что-то ещё, например, удалилась:
$ rm $(which ipython) $ ipython No such file or directory
Не беда! Можно попросить pyenv пересоздать их все заново:
$ pyenv rehash
И всё работает снова:
$ ipython Python 3.9.0a6 (default, May 3 2020, 16:58:20) Type 'copyright', 'credits' or 'license' for more information IPython 7.14.0 -- An enhanced Interactive Python. Type '?' for help. In [1]:
Можно вообще добавить команду pyenv rehash в свой ~/.bashrc (или аналог), чтобы при запуске шелла гарантированно иметь рабочие файлы-прослойки (shims).
Заключение
pyenv — очень удобный и полезный инструмент в ситуациях, когда нужную вам версию Python нельзя установить средствами операционной системы. Я вообще предпочитаю устанавливать все нужные мне версии интерпретатора самостоятельно через pyenv или asdf , даже если ОС уже содержит точно такую же версию — пусть ОС использует свою копию для служебных целей, а я для разработки буду использовать свою собственную копию, где смогу проводить любые кровавые эксперименты, не боясь поломать ОС.
Обязательно подпишитесь на уведомления о новых постах в блоге, чтобы ничего не пропустить!
Дополнительное чтение
- Репозиторий проекта на GitHub;
- Туториал на RealPython;
- Альтернатива: универсальный менеджер версий asdf .