Posso instalar o Python 3.xe 2.x no mesmo computador com Windows?


156

Estou executando o Windows e o shell / OS executa o Python automaticamente com base nas configurações do registro quando você executa um programa na linha de comando. Isso será interrompido se eu instalar as versões 2.xe 3.x do Python na mesma máquina?

Quero jogar com o Python 3 enquanto ainda consigo executar scripts 2.x na mesma máquina.


1
Na minha distribuição, o Fedora, instala o Python 2.7 at /usr/bin/pythone o Python 3.3 at /usr/bin/python3. Também fornece nomes diferentes para o Pip e o IPython do Python3. Muito conveniente.
Coronel Panic

19
@user - Em espírito, concordo com a sua resposta, mas já fui queimado por esse espírito tantas vezes que entendo por que alguém perguntaria antes de dar o salto.
27512 Peter

As respostas aqui parecem ser sobre como escolher qual python executar quando. Meu problema era que o instalador (3.6.2) não funcionava porque diz "Outra versão deste produto já está instalada". Acontece que eu já tinha o 3.6.3 instalado.
yoyo 24/01

Respostas:


66

A solução oficial para a coexistência parece ser o Python Launcher para Windows , PEP 397, incluído no Python 3.3.0 . Instalar os despejos py.exee pyw.exeativadores de lançamento em %SYSTEMROOT%( C:\Windows) que são associados pye pywscripts, respectivamente.

Para usar o novo iniciador (sem configurar manualmente suas próprias associações), deixe a opção "Registrar extensões" ativada. Não sei bem por que, mas na minha máquina ele deixou o Py 2.7 como o "padrão" (do iniciador).

A execução de scripts chamando-os diretamente da linha de comando os roteará pelo iniciador e analisará o shebang (se existir). Você também pode chamar explicitamente os interruptores lançador e de uso: py -3 mypy2script.py.

Todos os tipos de shebangs parecem funcionar

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

bem como abusos arbitrários

  • #! notepad.exe

"Eles" realmente devem incluir o pylauncher na atual distribuição do Python 2 para Windows (ou tornar as pessoas mais conscientes de que está disponível e de onde obtê-las).
martineau

1
Talvez, mas se você está apenas vivendo no mundo Python 2, não é nada demais.
Nick T

Este lançador estava disponível como programa independente, pelo menos desde meados de 2012.
Smit Johnth


1
@ Moonoon Crater você pode verificar com o que será usado where.exe pip. Eu acho que o instalador do Python 3 instala um pip3alias para seu pip, mas você também pode fazer algo como py -3 -m pip install requestseu acho.
Nick T

41

Aqui está a minha configuração:

  1. Instale o Python 2.7 e 3.4 com os instaladores do Windows .
  2. Vá para C:\Python34(o caminho de instalação padrão) e altere python.exe para python3.exe
  3. Edite suas variáveis ​​de ambiente para incluirC:\Python27\;C:\Python27\Scripts\;C:\Python34\;C:\Python34\Scripts\;

Agora, na linha de comando, você pode usar o python2.7 e o python33.4.


3
Que tal, por exemplo, pipem CLI?
Christian

3
As versões mais recentes do python 2 e 3 são fornecidas com pip. Então você pode usar pipe, pip3respectivamente.
Alistair Martin

8
Eu estava apenas apontando que você acabaria renomeando todos esses utilitários. Mesmo assim, existe o risco de que as coisas quebrem se, por exemplo, python3 explicitamente (por exemplo: codificado) chamar pip e não pip3.
Christian

É uma péssima idéia, acabaria renomeando tudo e o pip não funciona dessa maneira.
bhansa

para parar de executar no problema de pip no python3. você precisa de UNSLECT "install pip" no assistente inicial de instalação do python3, renomeie python3.7 / python.exe para python3.exe, então baixe get-pip.py e execute python3.exe get-pip.py. Assim, o PIP3 conhece o python3.exe renomeado é para python3 não o /python3.7/python.exe original
Junchen Liu

36

Você pode ter os dois instalados.

Você deve escrever isso na frente do seu script:

#!/bin/env python2.7

ou, eventualmente ...

#!/bin/env python3.6

Atualizar

Minha solução funciona perfeitamente com o Unix, depois de uma rápida pesquisa no Google , aqui está a solução do Windows:

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

A mesma coisa: na frente do seu script.


Bem, ele pode ser instalado no Linux e também no Windows. Você só precisa definir a variável env .. você pode fazer isso no Windows ...
Patrick Desjardins

7
Esta solução não funciona com o Windows (a menos que você o chame de um shell de estilo unix (por exemplo, cygwin)). O #! é tratado pelo shell e o Windows não o suporta. Eu acredito no exemplo, você pesquisei ele está sendo manuseado pelo servidor, não de ser lançado em janelas
Brian

Sim, no Apache no Windows ... o shell pedido pergunta automaticly, você pode fazê-lo com Cygwin, Apache, etc ...
Patrick Desjardins

@Daok: eu não te diminuí. Sou grato pela ajuda, mesmo uma tentativa de ajuda.
Minty

4
Pode-se usar pylauncher para fazer algo como este trabalho (conforme descrito no PEP 397 - Python lançador para Windows em 2011.
martineau

33

A partir da versão 3.3, o Python introduziu o utilitário Launcher for Windows https://docs.python.org/3/using/windows.html#python-launcher-for-windows .

Para poder usar várias versões do Python:

  1. instale o Python 2.x (x é qualquer versão que você precisa)
  2. instale o Python 3.x (x é qualquer versão necessária, você também deve ter uma versão 3.x> = 3.3)
  3. Prompt de Comando aberto
  4. digite py -2.x para iniciar o Python 2.x
  5. digite py -3.x para iniciar o Python 3.x

1
E as pessoas que usam IDE? Isso funciona para isso também?
Emorphus

1
@emorphus Eu acho que depende do IDE, mas em geral você deve poder escolher a versão do intérprete. Portanto, caso você tenha várias versões do Python instaladas, escolha a que deseja usar no seu projeto. Além disso, o terminal no IDE funciona da mesma forma que o prompt de comando, portanto esses comandos também devem funcionar lá.
Ivan Kucerak

2
Esta é a melhor solução IMO, funciona perfeitamente desde o início. Não precisa ter -3.x, você pode simplesmente fazer py -3 filename.py.
OmegaNalphA

9

Estou usando 2.5, 2.6 e 3.0 do shell com scripts de lote de uma linha do formulário:

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

Nomeie-os pythonX.Y.bate coloque-os em algum lugar do seu CAMINHO. Copie o arquivo para a versão secundária preferida (ou seja, a mais recente) para pythonX.bat. (Por exemplo copy python2.6.bat python2.bat.) Então você pode usar python2 file.pyde qualquer lugar.

No entanto, isso não ajuda ou afeta a situação de associação de arquivos do Windows. Para isso, você precisará de um programa iniciador que leia a #!linha e associe-o aos arquivos .py e .pyw.


Veja meu comentário sobre a resposta de Patrick Desjardins.
martineau

8

Quando você adiciona tanto a variáveis de ambiente haverá um haver um conflito porque os dois executável tem o mesmo nome: python.exe.

Apenas renomeie um deles. No meu caso, mudei o nome para python3.exe.

Então, quando eu corro, pythonele executa, python.exeque é 2,7, e quando eu corro, python3ele executa, python3.exeque é 3,6

insira a descrição da imagem aqui


Você pode elaborar a parte da nota? Quando renomeio python para python3, não consigo mais executar o pip porque parece pip.exe, pip3.exe e pip3.7.exe dependem do python.exe. Quando executo o pip, recebo o erro => 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

Não sei se não tive esse problema #
Charif DZ

@MandarSadye Você pode abrir o pip.exe no bloco de notas e procurar por python.exe. Em seguida, substitua python.exe por python3.exe
atg

7

Aqui está...

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)

Acabei de ler isso neste tópico (porque é o que eu estava precisando também). Eu tenho o Pythons 2.6.1 e 3.0.1 no Ubuntu e no Windows. Se não funcionar, você pode postar correções aqui.


1
Seria melhor usar sys.exit(process.returncode)para propagar o status de saída do script chamado para o chamador.
martineau

4

Tanto quanto eu sei, o Python foge da linha de comando usando a variável PATH em vez de uma configuração do registro.

Portanto, se você apontar para a versão correta no seu PATH, você a usará. Lembre-se de reiniciar o prompt de comando para usar as novas configurações de PATH.


Isso é verdade se você digitar 'python myscript.py', em seguida, poderá digitar C: \ python30 \ python.exe, mas o prompt de comando fará isso automaticamente se você digitar myscript.py e não desejar interromper o 2. ? scripts se eu instalar o 3.0 na mesma máquina.
Minty

Ah, e menta, pode ajudar a adicionar as informações do seu primeiro comentário à pergunta, estava um pouco nebuloso.
James McMahon

3

A instalação do Python normalmente associa .py, .pywe .pycarquivos com o interpretador Python. Portanto, você pode executar um script Python clicando duas vezes no Explorer ou digitando seu nome em uma janela da linha de comando (portanto, não é necessário digitar python scriptname.py, basta scriptname.pyfazê-lo).

Se você deseja alterar manualmente essa associação, você pode editar essas chaves no registro do 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

As pessoas têm vindo a trabalhar sobre um lançador de Python para Windows: um programa leve associada .pye .pywarquivos que iria procurar uma linha "shebang" (semelhante ao Linux et al) na primeira linha, e lançar Python 2.x ou 3.x como requeridos. Consulte a postagem do blog "Um lançador Python para Windows" para obter detalhes.


3

Tente usar o Anaconda.

Usando o conceito de ambientes Anaconda, digamos que você precise do Python 3 para aprender programação, mas não quer acabar com o ambiente do Python 2.7 atualizando o Python. Você pode criar e ativar um novo ambiente chamado "snakes" (ou o que quiser) e instalar a versão mais recente do Python 3 da seguinte maneira:

conda create --name snakes python=3

É mais simples do que parece, veja a página de introdução aqui: Introdução ao Anaconda

E, para lidar com o problema específico de ter as versões 2.xe 3.x funcionando lado a lado, consulte: Gerenciando versões do Python com o Anaconda


O link de introdução do Anaconda está quebrado.
alex

1
Corrigido o link para 'Introdução ao Anaconda'.
Cale Sweeney

2
@JeffreyCordero Corrigi o link. Os documentos do Anaconda podem ser executados, mas não podem se esconder.
Cale Sweeney

2

Aqui está como executar o Python 2 e 3 na mesma máquina

  1. instalar o Python 2.x
  2. instalar o Python 3.x
  3. Iniciar o PowerShell
  4. Digite Python -2 para iniciar o Python 2.x
  5. Digite Python -3 para iniciar o Python 2.x

O Python Launcher para Windows foi incorporado ao Python desde a Versão 3.3, como prometido em 2011, quando o Stand alone estreou pela primeira vez:

Iniciador do Python para Windows


E as pessoas que usam IDE? Isso funciona para isso também?
Emorphus

2

Aqui está uma maneira pura e limpa de instalar o Python2 e o Python3 no Windows.

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

Meu caso: eu tive que instalar o Apache cassandra. Eu já tinha Python3 instalado no meu D: unidade . Com muito trabalho de desenvolvimento em andamento, eu não queria mexer na minha instalação do Python3. E eu precisava do Python2 apenas para o Apache cassandra.

Então, eu tomei as seguintes etapas:

  1. Python baixado e instalado2.
  2. Adicionadas entradas Python2 ao classpath ( C:\Python27;C:\Python27\Scripts)
  3. Python.exe modificado para python2.exe (como mostrado na imagem abaixo)

insira a descrição da imagem aqui

  1. Agora eu sou capaz de executar os dois. Para Python 2 ( python2 --version) e Python 3 ( python --version). insira a descrição da imagem aqui

Portanto, minha instalação do Python3 permaneceu intacta.


1

Eu acho que existe uma opção para configurar a associação de arquivos do Windows para arquivos .py no instalador. Desmarque e você deve ficar bem.

Caso contrário, você poderá associar facilmente os arquivos .py à versão anterior. A maneira mais simples é clicar com o botão direito do mouse em um arquivo .py, selecionar "abrir com" / "escolher programa". Na caixa de diálogo exibida, selecione ou navegue até a versão do python que você deseja usar por padrão e marque a caixa de seleção "sempre use este programa para abrir esse tipo de arquivo".


Foi o que eu fiz. Ainda tenho 2.5.2 e 3.0.1 na minha caixa do Windows Vista. Eu desmarquei isso no Assistente de instalação (pode ter dito algo como "Registrar no sistema" - eu esqueço). Ambos funcionam bem. Para as coisas da linha de comando, coloquei um arquivo py.bat no meu caminho que inicia o python 3 - nada sofisticado, mas faz o que eu preciso.
Anon

1

Você deve garantir que a variável de ambiente PATH não contenha os dois arquivos python.exe (adicione o que você está usando no momento para executar scripts no dia a dia) ou faça o que Kniht sugeriu nos arquivos em lote. Além disso, não vejo por que não.

PS: Eu tenho 2.6 instalado como meu python "primário" e 3.0 como meu python "play" . O 2.6 está incluído no PATH . Tudo funciona bem.


1

Antes de instalar corajosamente os dois simultaneamente, eu tinha muitas perguntas. Se eu der python, ele irá para py3 quando eu quiser py2? pip / virtualenv acontecerá sob py2 / 3?

Parece ser muito simples agora.

Apenas instale cegamente os dois. Certifique-se de obter o tipo certo (x64 / x32). Enquanto / após a instalação, inclua no caminho as variáveis ​​de ambiente .

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

Substitua x no comando acima para definir o caminho.

Então vá para as duas pastas.

Navegar para

python3.6/Scripts/

e renomeie pip para pip3.

Se o pip3 já existir, exclua o pip. Isso garantirá que apenas o pip seja executado no python2 . Você pode verificar por:

pip --version

Caso você queira usar pip com python3 , basta usar

pip3 install 

Da mesma forma, você pode fazer o mesmo com o arquivo python e outros.

Felicidades!


1

Fácil, depois de instalar as duas versões do python, adicione os caminhos às variáveis ​​de ambiente; consulte configurações de variáveis ​​de ambiente. Em seguida, vá para as pastas python 2 e python 3 e renomeie-as para python2 e python3 respectivamente, como mostrado aqui para python2e aqui para python3. Agora, no cmd, digite python2 ou python3 para usar a versão necessária, consulte aqui.


0

Eu diria que tenho Python 2.4, 2.5 e 2.6 instalado lado a lado no mesmo computador.


Que o meu trabalho para várias versões do 2.x, mas o minty está perguntando se eles podem executar o 2.x ao lado do 3.x. Existem algumas diferenças significativas entre os dois. Veja: Diferenças entre 2.x e 3.x
Cale Sweeney

0

Estou apenas começando com python agora. Estou lendo o livro de Zed Shaw, "Aprenda Python da maneira mais difícil", que requer a versão 2.x do python, mas também estou fazendo uma aula que exige o python 3.x

Então aqui está o que eu fiz.

  1. Faça o download do python 2.7
  2. executar shell de energia (já deve estar instalado no Windows)
  3. execute python IN POWERSHELL (se não reconhecer, vá para a etapa 4)
  4. Somente se o powershell não reconhecer o tipo python 2.7 da seguinte maneira:

"[AMBIENTE] :: SETENVIRONMENTVARIABLE (" PATH "," $ ENV: PATH; C: \ PYTHON27 "," USER ")" (sem aspas externas)

  1. Agora digite python e você deve vê-lo dizer python 2.7 blá blá blá

AGORA para python 3.x

Simples, o download do python 3.x vem com o aplicativo python para windows. Portanto, basta fixar o aplicativo Python para Windows na barra de tarefas ou criar atalhos na área de trabalho e pronto!

Abra o Python para Windows para 3.x

Abra o PowerShell para python 2.x

Eu espero que isso ajude!


0

Hmm .. eu fiz isso agora fazendo o download do Python 3.6.5 para Windows em https://www.python.org/downloads/release/python-365/ e verifiquei se o lançador seria instalado. Em seguida, segui as instruções para usar o python 2 e o python 3. Reinicie o prompt de comando e use-o py -2.7para usar o Python 2 e / pyou o py -3.6Python 3. Você também pode usar pip2para o Python 2 pipe o pipPython 3 pip.


0

Eu tive o mesmo problema em que queria usar python3 na maioria dos trabalhos, mas o IDA pro exigia python2. Então, aqui está o que eu fiz.

Criei três variáveis ​​na variável de ambiente do usuário da seguinte maneira:

  1. PYTHON_ACTIVE: está inicialmente vazio
  2. HOME_PYTHON27: Possui um caminho para uma pasta na qual o Python 2 está instalado. Por exemplo. "; / scripts;"
  3. HOME_PYTHON38: Semelhante ao python 2, esta variável contém um caminho para as pastas do python 3.

Agora eu adicionei

% PYTHON_ACTIVE%

à variável PATH. Então, basicamente dizendo que o que quer que este "PYTHON_ACTIVE" contenha é o python ativo. Alteramos programaticamente o conteúdo de "PYTHON_ACTIVE" para alternar a versão do python.

Aqui está o script de exemplo:

:: 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 usa a versão python como entrada e, portanto, copia HOME_PYTHON27 ou HOME_PYTHON38 para PYTHON_ACTIVE. Alterando assim a versão global do Python.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.