Последнее обновление: 16.12.2022
На одной рабочей машине одновременно может быть установлено несколько версий Python. Это бывает полезно, когда идет работа с некоторыми внешними библиотеками, которые поддерживают разные версии python, либо в силу каких-то
других причин нам надо использовать несколько разных версий. Например, на момент написания статьи последней и актуальной является версия Python 3.11.
Но, допустим, необходимо также установить версию 3.10, как в этом случае управлять отдельными версиями Python?
Windows
На странице загрузок https://www.python.org/downloads/ мы можем найти ссылку на нужную версию:
И также загрузить ее и установить:
Чтобы при использовании интерпретатора Python не прописывать к нему весь путь, добавим при установке его в переменные среды. Но здесь надо учитывать, что в переменных среды
может содержаться несколько путей к разным интерпретаторам Python:
Та версия Python, которая находится выше, будет версией по умолчанию. С помощью кнопки «Вверх» можно нужную нам версию переместить в начало, сделав версией по умолчанию.
Например, в моем случае это версия 3.11. Соответственно, если я введу в терминале команду
или
то консоль отобразит версию 3.11:
C:\python>python --version Python 3.11.0
Для обращения к версии 3.10 (и всем другим версиям) необходимо использовать указывать номер версии:
C:\python>py -3.10 --version Python 3.10.9
например, выполнение скрипта hello.py
с помощью версии 3.10:
Подобным образом можно вызывать и другие версии Python.
MacOS
На MacOS можно установить разные версии, например, загрузив с официального сайта пакет установщика для определенной версии.
Для обращения к определенной версии Python на MacOS указываем явным образом подверсию в формате python3.[номер_подверсии]
. Например, у меня установлена версия
Python 3.10. Проверим ее версию:
Аналогично обращении к версии python3.9
(при условии если она установлена)
К примеру выполнение скрипта hello.py
с помощью версии python 3.10:
Linux
На Linux также можно установить одновременно несколько версий Python. Например, установка версий 3.10 и 3.11:
sudo apt-get install python3.10 sudo apt-get install python3.11
Одна из версий является версий по умолчанию. И для обращения к ней достаточно прописать python3, например, проверим версию по умолчанию:
Для обращения к другим версиям надо указывать подверсию:
python3.10 --version python3.11 --version
Например, выполнение скрипта hello
с помощью версии Python 3.10:
Но может сложиться ситуация, когда нам надо изменить версию по умолчанию. В этом случае применяется команда 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
можно изменить версию по умолчанию
New to Python and programming in general. I want to «install» a module from the command line for v 2.6, but it looks like my default Python is 2.5. (python —version returns 2.5.4)
How can I run my python setup.py build/install on 2.6 instead?
Many thanks in advance,
Brock
asked Jul 6, 2010 at 18:42
1
You can use explicit paths:
c:\python26\python setup.py install
c:\python25\python setup.py install
Recent versions of Python install PyLauncher. It is installed in the path so no need to add an explicit Python to the path, and it allows easy switching between multiple Python versions.
Examples:
py -3 setup.py # run latest Python 3
py -2 setup.py # run latest Python 2
py -3.3
py -2.7-32 # use 32-bit version
py # run default version
The default version can be specified in the environment variable PY_PYTHON
, e.g. PY_PYTHON=3
(latest Python 3).
answered Jul 6, 2010 at 20:06
Mark TolonenMark Tolonen
167k26 gold badges169 silver badges251 bronze badges
It depends on your operating system. If you have python 2.6 installed, you need to change your environment path to point to the 2.6 executable rather than the 2.5 executable. Do a Google search for changing your PATH variable on your operating system.
answered Jul 6, 2010 at 18:46
Alex BliskovskyAlex Bliskovsky
6,0037 gold badges32 silver badges41 bronze badges
1
If you’re on Windows and you just need to run a different version of Python temporarily or, as was the case for me, a third party program needs to run a different version of Python, then modify your path at the command prompt:
> python --version
> set PATH=<path-to-desired-python-version>;%PATH%
> python --version
For me it was:
> python --version
Python 3.4.2
> set PATH=C:\tools\python2\;%PATH%
> python --version
Python 2.7.9
> npm install...
(success)
This allowed the third party program to install successfully. The PATH modification only affects programs running in the same command prompt session and only lasts as long as the command prompt session..
answered Jan 6, 2015 at 14:38
SethSeth
6,5745 gold badges49 silver badges58 bronze badges
They are a couple of ways you can do this
1) python virtual environment
2) pylauncher
3) Changing your windows path variable, tedious to say the least
All three outlined in this video https://www.youtube.com/watch?v=ynDlb0n27cw
answered May 21, 2017 at 16:53
It sounds like you are on windows. If so, run this with the python you want, to set that python as the windows one. (not my code)
import sys
from _winreg import *
# tweak as necessary
version = sys.version[:3]
installpath = sys.prefix
regpath = "SOFTWARE\\Python\\Pythoncore\\%s\\" % (version)
installkey = "InstallPath"
pythonkey = "PythonPath"
pythonpath = "%s;%s\\Lib\\;%s\\DLLs\\" % (
installpath, installpath, installpath
)
def RegisterPy():
try:
reg = OpenKey(HKEY_LOCAL_MACHINE, regpath)
except EnvironmentError:
try:
reg = CreateKey(HKEY_LOCAL_MACHINE, regpath)
except Exception, e:
print "*** Unable to register: %s" % e
return
SetValue(reg, installkey, REG_SZ, installpath)
SetValue(reg, pythonkey, REG_SZ, pythonpath)
CloseKey(reg)
print "--- Python %s at %s is now registered!" % (version, installpath)
if __name__ == "__main__":
RegisterPy()
answered Apr 9, 2012 at 2:20
Im trying to switch between python versions 3.6.6
and 3.7.0
in windows. I tried py -3.6.6
and doesn’t work. Looked for options in py -h
, found none. I saw a couple of answers for switching between python versions 2.x
and 3.x
by adding #!python3
at the start of the file.
I’m able to switch between these by moving path variables up and down but I want to know if there is a option to switch between versions in cmd
like there is brew switch python version
in IOS.
Thank you.
asked Sep 2, 2018 at 2:35
If You have python of the same version with different subversion e.g. 2.6, 3.7,.. 3.9.
Use the below command to open specific python version’s terminal in command prompt:
py -2.6
py -3.7
.
for installing modules in command prompt:
py -2.6 -m pip install <modules>
py -3.7 -m pip install <modules>
answered Dec 2, 2020 at 6:35
NevetsKuroNevetsKuro
6447 silver badges15 bronze badges
1
The easiest way is simply type py -2
if you want to use python2, and py -3
if you want to use python3.
Hoppo
1,1401 gold badge13 silver badges32 bronze badges
answered Jun 15, 2020 at 21:07
Change the path in environment variable after downloading python 3.7.0 in windows where you can find in the properties of My Computer in Advanced System Settings
answered Sep 2, 2018 at 3:12
Akash BadamAkash Badam
4762 silver badges9 bronze badges
1
If you need to use multiple versions of Python, or run different sets of packages in the Python environment, you should probably just use Anaconda to create them, for example:
conda create -n py36 python=3.6 anaconda
then you can just switch between them using
activate <your-environment-name>
answered Sep 2, 2018 at 3:12
2
В большинстве операционных систем 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
— утилита, которая позволяет
легко переключаться между несколькими версиями интерпретатора 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
Скрипт не требует прав суперпользователя (без
sudo
), потому что
всё устанавливается в домашнюю директорию пользователя. Туда же
будут устанавливаться и интерпретаторы. Если страшно запускать
какие-то скрипты из интернета (так и должно быть), то прочитать код скрипта можно
здесь. -
Настроим шелл.
Предыдущая команда перед завершением должна была напечатать инструкции
по настройке шелла. Допустим, в случае с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)
Кстати, горячо рекомендую попробовать
fish
, очень удобный шелл. -
Установим зависимости для сборки.
При установке новой версии интерпретатора через
pyenv
под капотом
происходит сборка из исходников, поэтому для успешной установки
необходимы некоторые зависимости. Полный и актуальный список
для своей ОС смотрите здесь
или здесь.
Лучше установить всё заранее. -
Перезапустим шелл и проверим установку.
$ 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
:
В директории появился файл .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
пересоздать их все заново:
И всё работает снова:
$ 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
.
Обложка: Schwoaze, Snakes Black Snakes Animal Free Photo
Они устанавливаются отдельно и не конфликтуют. Переключатся можешь в ide. В терминале можешь писать python это версия 2 или python 3 это 3я версия. Качай https://www.python.org и не выдумывай). Конфликт может быть между версиями django и всяких библиотек на этот случай есть https://virtualenv.pypa.io/en/stable/ или docker.
устанавливаются в разные папки, запускаешь просто из каждой свой python.exe и всё, а если вопрос про переменные PATH, то можешь вручную назвать их python2 и python3 и прописать для каждой свой путь
Господа, а вы разве не знаете про консольную команду py? Если вызвать ее py -2 <имя питоновского файла>, то вызовется второй питон, если py -3 — третий. Без параметров, тот, что указан в environment переменной PY_PYTHON. Там еще много опций — у меня на работе все четыре питона стоят, 2.7.13 32.64 бита и 3.6.0 тоже в двух экземплярах.