¿Puedo instalar Python 3.xy 2.x en la misma computadora con Windows?

156

Estoy ejecutando Windows y el shell / OS ejecuta Python automáticamente en función de la configuración del registro cuando ejecuta un programa en la línea de comandos. ¿Se romperá esto si instalo una versión 2.xy 3.x de Python en la misma máquina?

Quiero jugar con Python 3 sin dejar de ejecutar scripts 2.x en la misma máquina.

menta
fuente
1
En mi distribución, Fedora, instala Python 2.7 en /usr/bin/pythony Python 3.3 en /usr/bin/python3. También da diferentes nombres para Pip e IPython de Python3. Muy útil.
Coronel Panic
19
@usuario: en espíritu, estoy de acuerdo con tu respuesta, pero ese espíritu me ha quemado tantas veces que entiendo por qué alguien preguntaría antes de dar el salto.
Peter Hanley
Las respuestas aquí parecen ser sobre cómo elegir qué python ejecutar y cuándo. Mi problema fue que el instalador (3.6.2) no se ejecutó porque dice "Otra versión de este producto ya está instalada". Resulta que ya tenía 3.6.3 instalado.
yoyo

Respuestas:

66

La solución oficial para la convivencia parece ser Python Launcher para Windows , PEP 397, que se incluyó en Python 3.3.0 . Instalar los volcados de lanzamiento py.exey los pyw.exelanzadores en %SYSTEMROOT%( C:\Windows), que luego se asocia con pyy pywscripts, respectivamente.

Para utilizar el nuevo iniciador (sin configurar manualmente sus propias asociaciones), deje habilitada la opción "Registrar extensiones". No estoy muy seguro de por qué, pero en mi máquina dejó Py 2.7 como "predeterminado" (del iniciador).

La ejecución de scripts llamándolos directamente desde la línea de comando los enrutará a través del iniciador y analizará el shebang (si existe). También puede llamar explícitamente a los interruptores de lanzadores y de uso: py -3 mypy2script.py.

Todo tipo de shebangs parecen funcionar

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

así como abusos sin sentido

  • #! notepad.exe
Nick T
fuente
"Ellos" realmente deberían incluir pylauncher con la distribución actual de Python 2 para Windows (o hacer que las personas sean más conscientes de que está disponible y de dónde obtenerlo ellos mismos).
Martineau
1
Tal vez, pero si solo estás viviendo en el mundo de Python 2, no es tan importante.
Nick T
Este lanzador estuvo disponible como programa independiente al menos desde mediados de 2012.
Smit Johnth
1
@Mooncrater puedes comprobar con qué se usará where.exe pip. Creo que el instalador de Python 3 instala un pip3alias para su pip, pero también podría hacer algo como py -3 -m pip install requestscreo.
Nick T
41

Aquí está mi configuración:

  1. Instale Python 2.7 y 3.4 con los instaladores de Windows .
  2. Vaya a C:\Python34(la ruta de instalación predeterminada) y cambie python.exe a python3.exe
  3. Edite sus variables de entorno para incluirC:\Python27\;C:\Python27\Scripts\;C:\Python34\;C:\Python34\Scripts\;

Ahora en la línea de comando puedes usar pythonpara 2.7 y python33.4.

Alistair Martin
fuente
3
¿Qué pasa, por ejemplo, pipen cli?
Cristiano
3
Las últimas versiones de python 2 y 3 se envían con pip. Entonces puedes usar pipy pip3respectivamente.
Alistair Martin
8
Simplemente estaba señalando que terminarías teniendo que cambiar el nombre de todas estas utilidades. Incluso entonces, existe el riesgo de que las cosas se rompan si, por ejemplo, python3 explícitamente (por ejemplo: codificado) llama a pip y no a pip3.
Christian
Esa es una mala idea, terminaría renombrando todo y pip no funciona de esa manera.
bhansa
para detener el problema de pip en python3. necesita UNSLECT "install pip" del asistente de instalación inicial de python3, luego cambie el nombre de python3.7 / python.exe a python3.exe, DESPUÉS descargue get-pip.py y ejecute python3.exe get-pip.py. Por lo que el PIP3 conoce el python3.exe renombrado es para python3 no es el original /python3.7/python.exe
Junchen Liu
36

Puedes tener ambos instalados.

Deberías escribir esto delante de tu script:

#!/bin/env python2.7

o, eventualmente ...

#!/bin/env python3.6

Actualizar

Mi solución funciona perfectamente con Unix, después de una búsqueda rápida en Google , aquí está la solución de Windows:

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

Lo mismo: delante de tu guión.

Patrick Desjardins
fuente
Bueno, se puede instalar en Linux y también en Windows. Solo necesita establecer la variable env ... puede hacerlo en Windows ...
Patrick Desjardins
77
Esta solución no funcionará con Windows (a menos que lo llame desde un shell de estilo Unix (por ejemplo, cygwin)). Los #! es manejado por el shell y Windows no lo admite. Creo en el ejemplo que el Google está siendo manejado por el servidor web, no desde su lanzamiento en ventanas
Brian
Sí, en Apache en Windows ... el shell de solicitud de preguntas automáticamente, puede hacerlo con Cygwin, Apache, etc.
Patrick Desjardins
@Daok: no te he votado mal. Estoy agradecido por la ayuda, incluso un intento de ayuda.
menta
44
Uno puede usar pylauncher para hacer que algo como esto funcione (como se describe en PEP 397 - Python launcher para Windows en 2011.
martineau
33

Desde la versión 3.3, Python introdujo la utilidad Launcher para Windows https://docs.python.org/3/using/windows.html#python-launcher-for-windows .

Entonces, para poder usar múltiples versiones de Python:

  1. instale Python 2.x (x es cualquier versión que necesite)
  2. instale Python 3.x (x es cualquier versión que necesite también debe tener una versión 3.x> = 3.3)
  3. abrir símbolo del sistema
  4. escriba py -2.x para iniciar Python 2.x
  5. escriba py -3.x para iniciar Python 3.x
Ivan Kucerak
fuente
1
¿Qué pasa con las personas que usan IDE? ¿Esto funciona para eso también?
emorphus
1
@emorphus, creo que depende del IDE, pero en general debería poder elegir la versión del intérprete. Entonces, en caso de que tenga instaladas varias versiones de Python, simplemente elija la que desea usar en su proyecto. También el terminal en IDE funciona igual que el símbolo del sistema, por lo que esos comandos también deberían funcionar allí.
Ivan Kucerak
2
Esta es la mejor solución IMO, funciona perfectamente desde el primer momento. No es necesario tener -3.x, solo puedes hacerlo py -3 filename.py.
OmegaNalphA
9

Estoy usando 2.5, 2.6 y 3.0 del shell con scripts por lotes de una línea del formulario:

:: 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 %*

Nómbralos pythonX.Y.baty ponlos en algún lugar de tu RUTA. Copie el archivo para la versión menor preferida (es decir, la última) en pythonX.bat. (Ej copy python2.6.bat python2.bat.) Entonces puedes usarlo python2 file.pydesde cualquier lugar.

Sin embargo, esto no ayuda ni afecta la situación de asociación de archivos de Windows. Para eso necesitará un programa de #!inicio que lea la línea y luego lo asocie con archivos .py y .pyw.

Comunidad
fuente
Vea mi comentario sobre la respuesta de Patrick Desjardins.
Martineau
8

Cuando se agrega tanto a las variables de entorno habrá un haber un conflicto, porque los dos ejecutables tienen el mismo nombre: python.exe.

Solo cambia el nombre de uno de ellos. En mi caso, le cambié el nombre a python3.exe.

Entonces, cuando corro python, se ejecutará, python.exeque es 2.7 y cuando corro python3, se ejecutará, python3.exeque es 3.6

ingrese la descripción de la imagen aquí

Charif DZ
fuente
¿Puedes por favor elaborar la parte de la nota? Cuando cambio el nombre de python a python3, ya no puedo ejecutar pip porque parece que pip.exe, pip3.exe y pip3.7.exe dependen de python.exe. Cuando ejecuto pip, obtengo error => 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" '.
Mandar Sadye
No sé, no tuve este problema
Charif DZ
@MandarSadye Puede abrir pip.exe en el bloc de notas y buscar python.exe .. Luego reemplace python.exe con python3.exe
atg
7

Aqui tienes...

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)

Acabo de decir esto al leer este hilo (porque es lo que también necesitaba). Tengo Pythons 2.6.1 y 3.0.1 tanto en Ubuntu como en Windows. Si no funciona para ti, publica correcciones aquí.


fuente
1
Sería mejor usarlo sys.exit(process.returncode)para propagar el estado de salida del script invocado a la persona que llama.
martineau
4

Hasta donde sé, Python se escapa de la línea de comandos usando la variable PATH en lugar de una configuración de registro.

Entonces, si señala la versión correcta en su RUTA, la usará. Recuerde reiniciar el símbolo del sistema para usar la nueva configuración de RUTA.

James McMahon
fuente
Esto es cierto si escribe 'python myscript.py', podría escribir C: \ python30 \ python.exe en su lugar, pero el símbolo del sistema lo hace automáticamente si simplemente escribe myscript.py y no quiero romper el 2. ? scripts si instalo 3.0 en la misma máquina.
menta
Ah, y menta podría ayudar agregar la información en su primer comentario a la pregunta, fue un poco nebuloso.
James McMahon
3

La instalación de Python asocia normalmente .py, .pywy .pyclos archivos con el intérprete de Python. Por lo tanto, puede ejecutar un script de Python haciendo doble clic en el Explorador o escribiendo su nombre en una ventana de línea de comandos (por lo que no es necesario escribir python scriptname.py, simplemente scriptname.pylo hará).

Si desea cambiar manualmente esta asociación, puede editar estas claves en el registro de 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

Lanzador de Python

La gente ha estado trabajando en un lanzador de Python para Windows: un programa ligero asociado con .pyy .pywarchivos que busque una línea "tinglado" (similar a Linux y otros) en la primera línea, y lanzar Python 2.x 3.x o como necesario. Consulte la publicación del blog "A Python Launcher for Windows" para obtener más información.

Craig McQueen
fuente
3

Intenta usar Anaconda.

Usando el concepto de entornos Anaconda, digamos que necesita Python 3 para aprender programación, pero no desea borrar su entorno Python 2.7 actualizando Python. Puede crear y activar un nuevo entorno llamado "serpientes" (o lo que desee) e instalar la última versión de Python 3 de la siguiente manera:

conda create --name snakes python=3

Es más simple de lo que parece, eche un vistazo a la página de introducción aquí: Introducción a Anaconda

Y luego, para manejar su problema específico de tener la versión 2.xy 3.x ejecutándose lado a lado, consulte: Administración de versiones de Python con Anaconda

Cale Sweeney
fuente
El enlace de introducción de Anaconda está roto.
alex
1
Se corrigió el enlace a 'Comenzando con Anaconda'.
Cale Sweeney
2
@JeffreyCordero Arreglé el enlace. Los documentos de Anaconda pueden ejecutarse, pero no pueden esconderse.
Cale Sweeney
2

Aquí se explica cómo ejecutar Python 2 y 3 en la misma máquina

  1. instalar Python 2.x
  2. instalar Python 3.x
  3. Iniciar Powershell
  4. Escriba Python -2 para iniciar Python 2.x
  5. Escriba Python -3 para iniciar Python 2.x

El lanzador de Python para Windows se integró en Python desde la Versión 3.3, como se prometió en 2011, cuando debutó por primera vez:

Python Launcher para Windows

rogerwamba
fuente
¿Qué pasa con las personas que usan IDE? ¿Esto funciona para eso también?
emorphus
2

Aquí hay una forma ordenada y limpia de instalar Python2 y Python3 en Windows.

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

Mi caso: tuve que instalar Apache cassandra. Ya tenía Python3 instalado en mi unidad D: . Con un montón de trabajo de desarrollo en proceso, no quería estropear mi instalación de Python3. Y, necesitaba Python2 solo para Apache cassandra.

Entonces tomé los siguientes pasos:

  1. Python2 descargado e instalado.
  2. Se agregaron entradas de Python2 a classpath ( C:\Python27;C:\Python27\Scripts)
  3. Python.exe modificado a python2.exe (como se muestra en la imagen a continuación)

ingrese la descripción de la imagen aquí

  1. Ahora puedo ejecutar ambos. Para Python 2 ( python2 --version) y Python 3 ( python --version). ingrese la descripción de la imagen aquí

Entonces, mi instalación de Python3 permaneció intacta.

Alex
fuente
1

Creo que hay una opción para configurar la asociación de archivos de Windows para archivos .py en el instalador. Desmarque y debería estar bien.

De lo contrario, puede volver a asociar fácilmente los archivos .py con la versión anterior. La forma más simple es hacer clic derecho en un archivo .py, seleccionar "abrir con" / "elegir programa". En el cuadro de diálogo que aparece, seleccione o busque la versión de python que desea usar de forma predeterminada y marque la casilla de verificación "usar siempre este programa para abrir este tipo de archivo".

Brian
fuente
Esto es lo que hice. Todavía tengo 2.5.2 y 3.0.1 en mi caja de Windows Vista. Desmarqué eso en el asistente de instalación (podría haber dicho algo como "Registrarse en el sistema", lo olvido). Ambos funcionan bien. Para las cosas de la línea de comandos, pongo un archivo py.bat en mi camino que inicia Python 3, nada sofisticado, pero hace lo que necesito.
Anon
1

Debe asegurarse de que la variable de entorno PATH no contenga ambos archivos python.exe (agregue el que está utilizando actualmente para ejecutar scripts diariamente) o haga lo que Kniht sugirió con los archivos por lotes. Aparte de eso, no veo por qué no.

PD: Tengo 2.6 instalado como mi python "principal" y 3.0 como mi python "play" . El 2.6 está incluido en la RUTA . Todo funciona bien

Geo
fuente
1

Antes de instalar valientemente ambos simultáneamente, tenía muchas preguntas. Si doy python, ¿irá a py3 cuando quiera py2? pip / virtualenv sucederá bajo py2 / 3?

Parece ser muy simple ahora.

Simplemente instale ciegamente ambos. Asegúrese de obtener el tipo correcto (x64 / x32). Mientras / después de la instalación, asegúrese de agregar a la ruta a sus variables de entorno .

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

Reemplace la x en el comando anterior para establecer la ruta.

Luego ve a ambas carpetas.

Navegar a

python3.6/Scripts/

y cambie el nombre de pip a pip3.

Si ya existe pip3, elimine el pip. Esto asegurará que solo pip se ejecutará en python2 . Puedes verificar por:

pip --version

En caso de que quiera usar pip con python3 , simplemente use

pip3 install 

De manera similar, puede hacer lo mismo con el archivo python y otros.

¡Salud!

Shreyaa Sridhar
fuente
1

Fácil, después de instalar ambas versiones de Python, agregue las rutas a las variables de entorno; vea ajustes variables de entorno. Luego vaya a las carpetas python 2 y python 3 y cámbieles el nombre a python2 y python3 respectivamente como se muestra aquí por python2y aquí por python3. Ahora en cmd, escriba python2 o python3 para usar la versión requerida aquí.

nilakantha singh deo
fuente
0

Supongo que sí, tengo Python 2.4, 2.5 y 2.6 instalados uno al lado del otro en la misma computadora.


fuente
Ese es mi trabajo para varias versiones de 2.x, pero Minty me pregunta si pueden ejecutar 2.x junto con 3.x. Hay algunas diferencias significativas entre los dos. Ver: diferencias entre 2.xy 3.x
Cale Sweeney
0

Estoy empezando con Python ahora. Estoy leyendo el libro de Zed Shaw "Learn Python the Hard Way" que requiere la versión 2.x de python, pero también estoy tomando una clase que requiere python 3.x

Así que aquí está lo que hice.

  1. Descargar python 2.7
  2. ejecutar power shell (ya debería estar instalado en Windows)
  3. ejecutar python EN POWERSHELL (si no reconoce, vaya al paso 4)
  4. Solo si powershell no reconoce el tipo de python 2.7 en lo siguiente:

"[ENVIRONMENT] :: SETENVIRONMENTVARIABLE (" PATH "," $ ENV: PATH; C: \ PYTHON27 "," USER ")" (sin comillas externas)

  1. Ahora escriba python y debería verlo decir python 2.7 bla, bla, bla

AHORA para python 3.x

La descarga simple de python 3.x viene con la aplicación python para Windows. ¡Así que simplemente fije la aplicación Python para Windows a su barra de tareas, o cree un acceso directo al escritorio y listo!

Abra Python para Windows para 3.x

Abra Powershell para python 2.x

¡Espero que esto ayude!

Davidopopoplis
fuente
0

Hmm ... Hice esto ahora mismo descargando Python 3.6.5 para Windows en https://www.python.org/downloads/release/python-365/ y me aseguré de que el lanzador estuviera instalado. Luego, seguí las instrucciones para usar Python 2 y Python 3. Reinicie el símbolo del sistema y luego use py -2.7para usar Python 2 y / pyo py -3.6Python 3. También puede usar pip2Python 2 pipy pipPython 3 pip.

Futuro Sin Miedo
fuente
0

Tuve el mismo problema en el que quería usar python3 para la mayoría del trabajo, pero IDA pro requería python2. Entonces, esto es lo que hice.

Primero creé 3 variables en la variable de entorno del usuario de la siguiente manera:

  1. PYTHON_ACTIVE: inicialmente está vacío
  2. HOME_PYTHON27: tiene una ruta a una carpeta donde está instalado Python 2. P.ej. ";/guiones;"
  3. HOME_PYTHON38: similar a python 2, esta variable contiene una ruta a las carpetas de python 3.

Ahora agregué

% PYTHON_ACTIVE%

RUTA variable. Entonces, básicamente diciendo que todo lo que contiene "PYTHON_ACTIVE" es la pitón activa. Cambiamos programáticamente los contenidos de "PYTHON_ACTIVE" para cambiar la versión de Python.

Aquí está el script de ejemplo:

:: 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

Este script toma la versión de Python como entrada y, en consecuencia, copia HOME_PYTHON27 o HOME_PYTHON38 en PYTHON_ACTIVE. Cambiando así la versión global de Python.

Mandar Sadye
fuente