Могу ли я установить Python 3.x и 2.x на одном компьютере с Windows?

156

Я использую Windows, и оболочка / ОС автоматически запускает Python на основе настроек реестра, когда вы запускаете программу из командной строки. Это сломается, если я установлю версии Python 2.x и 3.x на одну и ту же машину?

Я хочу играть с Python 3, но при этом иметь возможность запускать сценарии 2.x на той же машине.

мятный
источник
1
В моем дистрибутиве, Fedora, он устанавливает Python 2.7 в /usr/bin/pythonи Python 3.3 в /usr/bin/python3. Дает разные имена для Python3 Pip и IPython тоже. Очень кстати.
полковник Паник
19
@user - По духу я согласен с вашим ответом, но я столько раз горел этим духом, что понимаю, почему кто-то спрашивает, прежде чем совершить прыжок.
Питер Хенли
Ответы здесь, кажется, все о том, как выбрать, когда и на каком питоне запускать. Моя проблема заключалась в том, что установщик (3.6.2) не запустился, потому что он говорит: «Другая версия этого продукта уже установлена». Оказывается, у меня уже была установлена ​​3.6.3.
Yoyo

Ответы:

66

Официальное решение для сосуществования, кажется, Python Launcher для Windows , PEP 397, который был включен в Python 3.3.0 . Установка высвобождения отвалов py.exeи pyw.exeпусковые установки во %SYSTEMROOT%( C:\Windows) , который затем связанные с pyи pywсценариями, соответственно.

Чтобы использовать новый модуль запуска (без ручной настройки собственных ассоциаций с ним), оставьте включенным параметр «Регистрация расширений». Я не совсем уверен, почему, но на моей машине он оставил Py 2.7 в качестве «по умолчанию» (лаунчера).

Запуск сценариев путем вызова их непосредственно из командной строки направит их через панель запуска и проанализирует шебанг (если он существует). Кроме того, можно явно вызвать пусковую установку и использование переключателей: py -3 mypy2script.py.

Все манеры Шебанга, кажется, работают

  • #!C:\Python33\python.exe
  • #!python3
  • #!/usr/bin/env python3

а также бессмысленные злоупотребления

  • #! notepad.exe
Ник Т
источник
«Они» действительно должны включить pylauncher в текущий дистрибутив Python 2 для Windows (или сделать так, чтобы люди больше знали о его доступности и о том, где его взять сами).
Мартино
1
Возможно, но если вы просто живете в мире Python 2, это не так уж важно.
Ник Т
Эта программа запуска была доступна как отдельная программа, по крайней мере, с середины 2012 года.
Смит Джонт
1
@Mooncrater, вы можете проверить, который будет использоваться с where.exe pip. Я думаю, что установщик Python 3 устанавливает pip3псевдоним для своего пункта, но вы также можете сделать что-то вроде того, что py -3 -m pip install requestsя думаю.
Ник Т
41

Вот мои настройки:

  1. Установите оба Python 2.7 и 3.4 с установщиками Windows .
  2. Перейдите к C:\Python34(путь установки по умолчанию) и измените python.exe на python3.exe
  3. Отредактируйте переменные среды, чтобы включитьC:\Python27\;C:\Python27\Scripts\;C:\Python34\;C:\Python34\Scripts\;

Теперь в командной строке вы можете использовать pythonдля 2.7 и python3для 3.4.

Алистер Мартин
источник
3
А как, например, pipв кли?
Кристиан
3
Последние версии Python 2 & 3 поставляются с pip. Так что вы можете использовать pipи pip3соответственно.
Алистер Мартин
8
Я просто указывал, что вам придется переименовать все эти утилиты. Даже тогда существует риск того, что что-то сломается, если, например, python3 явно (например, жестко запрограммирован) вызывает pip, а не pip3.
Кристиан
Это плохая идея, в конечном итоге переименовать все, и Пип не работает таким образом.
Бханса
перестать сталкиваться с проблемой пипса на python3. вам нужно ОТКЛЮЧИТЬ «install pip» из первоначального мастера установки python3, затем переименуйте python3.7 / python.exe в python3.exe, ТО скачайте get-pip.py и запустите python3.exe get-pip.py. Таким образом, pip3 знает, что переименованный python3.exe предназначен для python3, а не для оригинального /python3.7/python.exe
Liu
36

Вы можете установить оба.

Вы должны написать это перед вашим сценарием:

#!/bin/env python2.7

или, в конце концов ...

#!/bin/env python3.6

Обновить

Мое решение отлично работает с Unix, после быстрого поиска в Google вот решение для Windows:

#!c:/Python/python3_6.exe -u

То же самое: перед вашим сценарием.

Патрик Дежарден
источник
Ну, это может быть установлено на Linux, и может быть на Windows тоже. Вам просто нужно установить переменную env .. вы можете сделать это в Windows ...
Патрик Дежарден
7
Это решение не будет работать с окнами (если вы не вызываете его из оболочки в стиле Unix (например, Cygwin)). #! обрабатывается оболочкой, и Windows не поддерживает его. Я верю в пример, который вы гуглили, он обрабатывается веб-сервером, а не запускается в Windows
Brian
Да, на Apache на Windows ... оболочка запроса вопроса автоматически, вы можете сделать это с Cygwin, Apache и т.д ...
Патрик Дежарден
@ Даок: я не понизил тебя. Я благодарен за помощь даже за попытку помочь.
minty
4
Можно использовать pylauncher, чтобы сделать что-то вроде этой работы (как описано в PEP 397 - Средство запуска Python для Windows в 2011 году.
martineau
33

Начиная с версии 3.3, Python представил утилиту Launcher для Windows https://docs.python.org/3/using/windows.html#python-launcher-for-windows .

Итак, чтобы иметь возможность использовать несколько версий Python:

  1. установить Python 2.x (x - любая нужная вам версия)
  2. установить Python 3.x (x - это любая версия, которая вам нужна, у вас должна быть одна версия 3.x> = 3.3)
  3. открыть командную строку
  4. введите py -2.x для запуска Python 2.x
  5. введите py -3.x для запуска Python 3.x
Иван Кучерак
источник
1
А как насчет людей, которые используют IDE? Это работает для этого тоже?
emorphus
1
@emorphus Я думаю, это зависит от IDE, но в целом вы должны выбрать версию интерпретатора. Поэтому, если у вас установлено несколько версий Python, просто выберите ту, которую вы хотите использовать в своем проекте. Также терминал в IDE работает так же, как командная строка, поэтому эти команды должны работать там же.
Иван Кучерак
2
Это лучшее решение IMO, оно отлично работает с самого начала. Не нужно иметь -3.x, который вы можете просто сделать py -3 filename.py.
OmegaNalphA
9

Я использую 2.5, 2.6 и 3.0 из оболочки с пакетными сценариями в одну строку вида:

:: The @ symbol at the start turns off the prompt from displaying the command.
:: The % represents an argument, while the * means all of them.
@c:\programs\pythonX.Y\python.exe %*

Назовите их pythonX.Y.batи поместите их где-нибудь в вашем ПУТИ. Скопируйте файл для предпочитаемой минорной версии (т.е. самой последней) в pythonX.bat. (Например copy python2.6.bat python2.bat.) Тогда вы можете использовать python2 file.pyиз любого места.

Однако это не помогает и даже не влияет на ситуацию с ассоциацией файлов Windows. Для этого вам понадобится программа запуска, которая читает #!строку, а затем связывает ее с файлами .py и .pyw.

Сообщество
источник
Смотрите мой комментарий об ответе Патрика Дежарденса.
Мартино
8

При добавлении и переменной среда будет А конфликт , так как два исполняемыми имеют одинаковое имя: python.exe.

Просто переименуйте один из них. В моем случае я переименовал его в python3.exe.

Таким образом, когда я запускаю, pythonон будет выполняться, python.exeкоторый составляет 2,7, а когда я бегу, python3он выполняет, python3.exeкоторый составляет 3,6

введите описание изображения здесь

Charif DZ
источник
Можете ли вы разработать часть примечания? Когда я переименовываю python в python3, я больше не могу запустить pip, потому что кажется, что pip.exe, pip3.exe и pip3.7.exe все зависят от python.exe. Когда я запускаю pip, я получаю сообщение об ошибке => Fatal error in launcher: Unable to create process using '"c:\users\<my_username>\appdata\local\programs\python\python37-32\python.exe" "C:\Users\<my_username>\AppData\Local\Programs\Python\Python37-32\Scripts\pip.exe" '.
Мандар Садье
Я не знаю, у меня не было этой проблемы
Чариф Д.З.
@MandarSadye Вы можете открыть pip.exe в блокноте и найти python.exe .. Затем замените python.exe на python3.exe
atg
7

Ну вот...

winpylaunch.py

#
# Looks for a directive in the form: #! C:\Python30\python.exe
# The directive must start with #! and contain ".exe".
# This will be assumed to be the correct python interpreter to
# use to run the script ON WINDOWS. If no interpreter is
# found then the script will be run with 'python.exe'.
# ie: whatever one is found on the path.
# For example, in a script which is saved as utf-8 and which
# runs on Linux and Windows and uses the Python 2.6 interpreter...
#
#    #!/usr/bin/python
#    #!C:\Python26\python.exe
#    # -*- coding: utf-8 -*-
#
# When run on Linux, Linux uses the /usr/bin/python. When run
# on Windows using winpylaunch.py it uses C:\Python26\python.exe.
#
# To set up the association add this to the registry...
#
#    HKEY_CLASSES_ROOT\Python.File\shell\open\command
#    (Default) REG_SZ = "C:\Python30\python.exe" S:\usr\bin\winpylaunch.py "%1" %*
#
# NOTE: winpylaunch.py itself works with either 2.6 and 3.0. Once
# this entry has been added python files can be run on the
# commandline and the use of winpylaunch.py will be transparent.
#

import subprocess
import sys

USAGE = """
USAGE: winpylaunch.py <script.py> [arg1] [arg2...]
"""

if __name__ == "__main__":
  if len(sys.argv) > 1:
    script = sys.argv[1]
    args   = sys.argv[2:]
    if script.endswith(".py"):
      interpreter = "python.exe" # Default to wherever it is found on the path.
      lines = open(script).readlines()
      for line in lines:
        if line.startswith("#!") and line.find(".exe") != -1:
          interpreter = line[2:].strip()
          break
      process = subprocess.Popen([interpreter] + [script] + args)
      process.wait()
      sys.exit()
  print(USAGE)

Я только что прочитал об этом, прочитав эту ветку (потому что это то, что мне тоже нужно). У меня есть Pythons 2.6.1 и 3.0.1 на Ubuntu и Windows. Если это не работает для вас, опубликуйте исправления здесь.


источник
1
Было бы лучше использовать sys.exit(process.returncode)для передачи статуса завершения вызванного сценария вызывающей стороне.
Мартино
4

Насколько я знаю, Python запускается из командной строки, используя переменную PATH, а не параметр реестра.

Так что, если вы укажете правильную версию в вашем PATH, вы будете использовать это. Не забудьте перезапустить командную строку, чтобы использовать новые параметры PATH.

Джеймс МакМэхон
источник
Это верно, если вы наберете «python myscript.py», тогда вы можете вместо этого набрать C: \ python30 \ python.exe, но командная строка сделает это автоматически, если вы просто введете myscript.py, а я не хочу разбивать 2. ? скрипты, если я устанавливаю 3.0 на той же машине.
minty
Да, конечно, это может помочь добавить информацию в вашем первом комментарии к вопросу, она была немного туманной.
Джеймс МакМахон
3

Установка Python обычно ассоциируется .py, .pywи .pycфайлы с интерпретатором Python. Таким образом, вы можете запустить скрипт Python, дважды щелкнув его в проводнике, или введя его имя в окне командной строки (поэтому вводить не нужно python scriptname.py, просто scriptname.pyподойдет).

Если вы хотите вручную изменить эту связь, вы можете отредактировать эти ключи в реестре Windows:

HKEY_CLASSES_ROOT\Python.File\shell\open\command
HKEY_CLASSES_ROOT\Python.NoConFile\shell\open\command
HKEY_CLASSES_ROOT\Python.CompiledFile\shell\open\command

Python Launcher

Люди работают на пусковой установке Python для Windows: легкая программа , связанная с .pyи .pywфайлы , которые выглядят бы на линии «притон» ( по аналогии с Linux и др) на первой линии, и запустить Python 2.x или 3.x , как обязательный. Подробности смотрите в блоге «Запуск Python для Windows» .

Крейг МакКуин
источник
3

Попробуйте использовать Анаконду.

Используя концепцию сред Anaconda, предположим, что вам нужен Python 3 для изучения программирования, но вы не хотите уничтожать свою среду Python 2.7 путем обновления Python. Вы можете создать и активировать новую среду с именем «snakes» (или что угодно) и установить последнюю версию Python 3 следующим образом:

conda create --name snakes python=3

Это проще, чем кажется, взгляните на вступительную страницу здесь: Начало работы с Anaconda

А затем для решения вашей конкретной проблемы, связанной с параллельной работой версий 2.x и 3.x, см. Управление версиями Python с помощью Anaconda.

Кейл Суини
источник
Ссылка на Anaconda не работает.
Алекс
1
Исправлена ​​ссылка на «Начало работы с Anaconda».
Кейл Суини
2
@JeffreyCordero Я исправил ссылку. Документы Anaconda могут работать, но они не могут скрыться.
Кейл Суини
2

Вот как запустить Python 2 и 3 на одной машине

  1. установить Python 2.x
  2. установить Python 3.x
  3. Запустить Powershell
  4. Введите Python -2 для запуска Python 2.x
  5. Введите Python -3 для запуска Python 2.x

Python Launcher для Windows , был встроен в Python начиная с версии 3.3, как и было обещано в 2011 году , когда в одиночку Stand первый дебютировали:

Python Launcher для Windows

rogerwamba
источник
А как насчет людей, которые используют IDE? Это работает для этого тоже?
emorphus
2

Вот аккуратный и чистый способ установить Python2 & Python3 на Windows.

https://datascience.com.co/how-to-install-python-2-7-and-3-6-in-windows-10-add-python-path-281e7eae62a

Мой случай: мне пришлось установить Apache Cassandra. У меня уже был установлен Python3 на моем диске D : . Из-за множества работ по разработке я не хотел испортить мою установку Python3. И мне нужен был Python2 только для Apache Cassandra.

Поэтому я предпринял следующие шаги:

  1. Скачал и установил Python2.
  2. Добавлены записи Python2 в classpath ( C:\Python27;C:\Python27\Scripts)
  3. Изменен python.exe для python2.exe (как показано на рисунке ниже)

введите описание изображения здесь

  1. Теперь я могу запустить оба. Для Python 2 ( python2 --version) и Python 3 ( python --version). введите описание изображения здесь

Итак, моя установка Python3 осталась без изменений.

Alex
источник
1

Я думаю, что есть возможность настроить связь файлов Windows для .py файлов в установщике. Снимите флажок, и все будет хорошо.

Если нет, вы можете легко повторно связать .py файлы с предыдущей версией. Самый простой способ - щелкнуть правой кнопкой мыши файл .py, выбрать «открыть с помощью» / «выбрать программу». В появившемся диалоговом окне выберите или выберите версию python, которую вы хотите использовать по умолчанию, и установите флажок «всегда использовать эту программу, чтобы открыть файл такого типа».

Брайан
источник
Это то, что я сделал. У меня все еще есть 2.5.2 и 3.0.1 на моей коробке Windows Vista. Я не проверял, что в мастере установки (возможно, сказал что-то вроде «Зарегистрироваться в системе» - я забыл). Оба работают нормально. Для командной строки я поместил в свой путь файл py.bat, который запускает Python 3 - ничего особенного, но он делает то, что мне нужно.
Anon
1

Вы должны убедиться, что переменная окружения PATH не содержит оба файла python.exe (добавьте тот, который вы в настоящее время используете для ежедневного запуска сценариев), или сделайте так, как предложил Kniht с пакетными файлами. Кроме того, я не понимаю, почему нет.

PS: у меня установлен 2.6 как «основной» python и 3.0 как «play» . 2.6 включен в ПУТЬ . Все отлично работает

Geo
источник
1

Прежде чем я смело установил оба одновременно, у меня было так много вопросов. Если я дам python, пойдет ли он на py3, когда я захочу py2? pip / virtualenv произойдет под py2 / 3?

Кажется, сейчас все очень просто.

Просто вслепую установите их обоих. Убедитесь, что вы получите правильный тип (x64 / x32). Во время / после установки убедитесь, что вы добавляете в путь переменные среды .

[ENVIRONMENT]::SETENVIRONMENTVARIABLE("PATH", "$ENV:PATH;C:\PYTHONx", "USER")

Замените x в приведенной выше команде, чтобы задать путь.

Затем перейдите в обе папки.

Перейдите к

python3.6/Scripts/

и переименуйте pip в pip3.

Если pip3 уже существует, удалите pip. Это обеспечит запуск только pip под python2 . Вы можете проверить по:

pip --version

Если вы хотите использовать pip с python3, просто используйте

pip3 install 

Вы можете сделать то же самое с файлом Python и другими.

Ура!

Шрея Шридхар
источник
1

Easy-peasy, после установки обеих версий python добавьте пути к переменным окружения, см настройки переменных среды. Затем перейдите к папкам python 2 и python 3 и переименуйте их в python2 и python3 соответственно, как показано здесь для python2и здесь для python3. Теперь в cmd наберите python2 или python3 для использования требуемой версии Вот.

нилаканта сингх део
источник
0

Я предполагаю, что у меня есть Python 2.4, 2.5 и 2.6, установленные бок о бок на одном компьютере.


источник
Это моя работа для нескольких версий 2.x, но minty спрашивает, могут ли они запустить 2.x вместе с 3.x. Есть некоторые существенные различия между ними. См. Различия между 2.x и 3.x
Кейл Суини
0

Я только начинаю с Python. Я читаю книгу Зеда Шоу «Изучай Python как трудный путь», для которой требуется Python версии 2.x, но я также беру класс, который требует Python 3.x

Итак, вот что я сделал.

  1. Скачать Python 2.7
  2. запустить Power Shell (должен быть уже установлен на Windows)
  3. запустите python IN POWERSHELL (если он не распознает, перейдите к шагу 4)
  4. Только если powershell не распознает тип Python 2.7 в следующем:

"[ENVIRONMENT] :: SETENVIRONMENTVARIABLE (" PATH "," $ ENV: PATH; C: \ PYTHON27 "," USER ")" (без внешних кавычек)

  1. Теперь введите python, и вы должны увидеть, как Python 2.7 бла-бла-бла

СЕЙЧАС для Python 3.x

Простая загрузка Python 3.x поставляется с приложением Python для Windows. Так что просто прикрепите приложение Python для Windows к панели задач или создайте ярлык на рабочем столе, и все готово!

Откройте Python для Windows для 3.x

Откройте Powershell для Python 2.x

Надеюсь, это поможет!

Davidopopoplis
источник
0

Хм ... Я сделал это прямо сейчас, просто загрузив Python 3.6.5 для Windows по адресу https://www.python.org/downloads/release/python-365/ и убедившись, что программа запуска будет установлена. Затем я следовал инструкциям по использованию Python 2 и Python 3. Перезапустите командную строку и затем используйте py -2.7для использования Python 2 и / pyили py -3.6для использования Python 3. Вы также можете использовать pip2для Python 2 pipи pipдля Python 3 pip.

FearlessFuture
источник
0

У меня была та же проблема, когда я хотел использовать python3 для большей части работы, но IDA pro требовал python2. Итак, вот что я сделал.

Сначала я создал 3 переменные в пользовательской переменной среды следующим образом:

  1. PYTHON_ACTIVE: изначально пусто
  2. HOME_PYTHON27: содержит путь к папке, в которой установлен Python 2. Например. "; / Скрипты;"
  3. HOME_PYTHON38: Как и в python 2, эта переменная содержит путь к папкам python 3.

Теперь я добавил

% PYTHON_ACTIVE%

в переменную PATH. Таким образом, в сущности говоря, что бы ни содержало это "PYTHON_ACTIVE", это активный питон. Мы программно изменяем содержимое «PYTHON_ACTIVE» для переключения версии Python.

Вот пример сценария:

:: This batch file is used to switch between python 2 and 3.
@ECHO OFF

set /p choice= "Please enter '27' for python 2.7 , '38' for python 3.8 : "

IF %choice%==27 (
setx PYTHON_ACTIVE %HOME_PYTHON27%
)

IF %choice%==38 (
setx PYTHON_ACTIVE %HOME_PYTHON38%
)


PAUSE

Этот скрипт принимает версию Python в качестве входных данных и соответственно копирует HOME_PYTHON27 или HOME_PYTHON38 в PYTHON_ACTIVE. Таким образом меняется глобальная версия Python.

Мандар Садье
источник