Posso installare Python 3.xe 2.x sullo stesso computer Windows?


156

Sto eseguendo Windows e la shell / OS esegue automaticamente Python in base alle impostazioni del registro quando si esegue un programma dalla riga di comando. Questo si interromperà se installo una versione 2.xe 3.x di Python sullo stesso computer?

Voglio giocare con Python 3 pur essendo in grado di eseguire script 2.x sulla stessa macchina.


1
Nella mia distro, Fedora, installa Python 2.7 at /usr/bin/pythone Python 3.3 at /usr/bin/python3. Dà nomi diversi anche per Pip e IPython di Python3. Molto maneggevole.
Colonnello Panic,

19
@utente - In spirito concordo con la tua risposta, ma sono stato bruciato da quello spirito così tante volte che capisco perché qualcuno avrebbe chiesto prima di fare il salto.
Peter Hanley,

Le risposte qui sembrano essere tutte su come scegliere quale pitone eseguire quando. Il mio problema era che il programma di installazione (3.6.2) non funzionava perché diceva "Un'altra versione di questo prodotto è già installata". Risulta che avevo già installato 3.6.3.
yoyo

Risposte:


66

La soluzione ufficiale per la coesistenza sembra essere il Python Launcher per Windows , PEP 397 incluso in Python 3.3.0 . Installazione dei dump di rilascio py.exee dei pyw.exelanciatori in %SYSTEMROOT%( C:\Windows) che viene quindi associato rispettivamente a pye pywscript.

Per utilizzare il nuovo programma di avvio (senza impostare manualmente le proprie associazioni), lasciare l'opzione "Registra estensioni" abilitata. Non sono del tutto sicuro del perché, ma sulla mia macchina ha lasciato Py 2.7 come "predefinito" (del programma di avvio).

L'esecuzione degli script chiamandoli direttamente dalla riga di comando li indirizzerà attraverso il programma di avvio e analizzerà lo shebang (se esiste). È anche possibile chiamare in modo esplicito il lanciatore e sull'uso di interruttori: py -3 mypy2script.py.

Sembra che tutti i tipi di shebang funzionino

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

così come abusi sfrenati

  • #! notepad.exe

"Loro" dovrebbero davvero includere pylauncher con l'attuale distribuzione di Python 2 per Windows (o rendere le persone più consapevoli che è disponibile e dove trovarlo da soli).
martineau,

1
Forse, ma se stai vivendo nel mondo di Python 2 non è un grosso problema.
Nick T,

Questo lanciatore era disponibile come programma autonomo almeno dalla metà del 2012.
Smit Johnth,


1
@Mooncrater è possibile verificare con quale verrà utilizzato where.exe pip. Penso che il programma di installazione di Python 3 installi un pip3alias per il suo pip, ma potresti anche fare qualcosa come py -3 -m pip install requestspenso.
Nick T

41

Ecco la mia configurazione:

  1. Installa sia Python 2.7 che 3.4 con i programmi di installazione di Windows .
  2. Vai a C:\Python34(il percorso di installazione predefinito) e modifica python.exe in python3.exe
  3. Modifica le variabili di ambiente da includereC:\Python27\;C:\Python27\Scripts\;C:\Python34\;C:\Python34\Scripts\;

Ora nella riga di comando puoi usare pythonper 2.7 e python3per 3.4.


3
Che dire, ad esempio, pipin cli?
Christian,

3
Le ultime versioni di Python 2 e 3 vengono fornite con pip. Quindi puoi usare pipe pip3rispettivamente.
Alistair Martin,

8
Stavo solo sottolineando che avresti dovuto rinominare tutte queste utilità. Anche allora, c'è il rischio che le cose si rompano se, ad esempio, python3 esplicitamente (ad esempio: hard coded) chiama pip e non pip3.
Christian,

Questa è una cattiva idea, finirebbe per rinominare tutto e pip non funziona in questo modo.
Bhansa,

per interrompere l'esecuzione del problema pip su python3. è necessario UNSLECT "install pip" dalla procedura guidata di installazione iniziale di python3, quindi rinominare python3.7 / python.exe in python3.exe, quindi scaricare get-pip.py ed eseguire python3.exe get-pip.py. Quindi il pip3 sa che il rinominato python3.exe è per python3 non l'originale /python3.7/python.exe
Junchen Liu,

36

Puoi avere entrambi installati.

Dovresti scrivere questo davanti al tuo copione:

#!/bin/env python2.7

o, eventualmente,

#!/bin/env python3.6

Aggiornare

La mia soluzione funziona perfettamente con Unix, dopo una rapida ricerca su Google , ecco la soluzione Windows:

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

Stessa cosa: davanti alla tua sceneggiatura.


WEll, può essere installato su Linux e può essere anche su Windows. Devi solo impostare la variabile env .. puoi farlo in Windows ...
Patrick Desjardins,

7
Questa soluzione non funzionerà con Windows (a meno che non la chiami da una shell in stile unix (es. Cygwin)). Il #! è gestito dalla shell e Windows non lo supporta. Credo che nell'esempio che hai cercato su Google sia gestito dal server web, non dall'essere lanciato su Windows
Brian,

Sì, su Apache su Windows ... automaticamente la richiesta di shell shell, puoi farlo con Cygwin, Apache, ecc ...
Patrick Desjardins,

@Daok: non ti ho votato. Sono grato per l'aiuto anche per un tentativo di aiuto.
menta il

4
Si può usare pylauncher per far funzionare qualcosa del genere (come descritto in PEP 397 - Python launcher per Windows nel 2011.
martineau,

33

Dalla versione 3.3 Python ha introdotto l'utilità Launcher per Windows https://docs.python.org/3/using/windows.html#python-launcher-for-windows .

Quindi, per poter utilizzare più versioni di Python:

  1. installa Python 2.x (x è la versione che ti serve)
  2. installa Python 3.x (x è una versione che ti serve anche devi avere una versione 3.x> = 3.3)
  3. apri il prompt dei comandi
  4. digitare py -2.x per avviare Python 2.x
  5. digitare py -3.x per avviare Python 3.x

1
Che dire delle persone che usano gli IDE? Funziona anche per quello?
emorfo

1
@emorphus Immagino che dipenda dall'IDE, ma in generale dovresti essere in grado di scegliere la versione dell'interprete. Quindi, nel caso in cui siano installate più versioni di Python, basta scegliere quella che si desidera utilizzare nel progetto. Anche il terminale in IDE funziona come il prompt dei comandi, quindi anche quei comandi dovrebbero funzionare lì.
Ivan Kucerak,

2
Questa è la migliore soluzione IMO, funziona perfettamente fin dall'inizio. Non è necessario avere -3.x che puoi fare py -3 filename.py.
OmegaNalphA,

9

Sto usando 2.5, 2.6 e 3.0 dalla shell con script batch di una riga del modulo:

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

Denominali pythonX.Y.bate mettili da qualche parte nel tuo PERCORSO. Copia il file per la versione secondaria preferita (ovvero l'ultima) in pythonX.bat. (Es copy python2.6.bat python2.bat.) Quindi puoi usare python2 file.pyda qualsiasi luogo.

Tuttavia, ciò non aiuta né influisce sulla situazione dell'associazione dei file di Windows. Per questo avrai bisogno di un programma di avvio che legga la #!riga e quindi lo associ ai file .py e .pyw.


Vedi il mio commento sulla risposta di Patrick Desjardins.
martineau,

8

Quando si aggiunge sia per le variabili di ambiente ci sarà un un conflitto perché i due eseguibile hanno lo stesso nome: python.exe.

Basta rinominarne uno. Nel mio caso l'ho rinominato inpython3.exe .

Quindi quando corro pythoneseguirà quello python.exeche è 2.7 e quando corro python3eseguirà python3.exeche è 3.6

inserisci qui la descrizione dell'immagine


Potete per favore elaborare la parte della nota? Quando rinominare python in python3, non riesco più a eseguire pip perché sembra pip.exe, pip3.exe e pip3.7.exe tutto dipende da python.exe. Quando eseguo pip, ottengo errore => 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,

Non so di non avere questo problema
Charif DZ,

@MandarSadye È possibile aprire PIP.EXE in blocchetto per appunti e la ricerca di python.exe .. Quindi sostituire python.exe con python3.exe
ATG

7

Ecco qui...

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)

Ho appena rovinato tutto leggendo questo thread (perché è quello di cui avevo bisogno anche io). Ho Pythons 2.6.1 e 3.0.1 sia su Ubuntu che su Windows. Se non funziona per te pubblica le correzioni qui.


1
Sarebbe meglio usare sys.exit(process.returncode)per propagare al chiamante lo stato di uscita dello script invocato.
martineau,

4

Per quanto ne so, Python si allontana dalla riga di comando usando la variabile PATH anziché un'impostazione del registro.

Quindi, se punti la versione corretta sul tuo PERCORSO, la userai. Ricordare di riavviare il prompt dei comandi per utilizzare le nuove impostazioni PATH.


Questo è vero se si digita 'python myscript.py', quindi è possibile digitare C: \ python30 \ python.exe invece, ma il prompt dei comandi lo fa automaticamente se si digita myscript.py e non voglio interrompere il 2. ? script se installo 3.0 sulla stessa macchina.
menta

Oh e menta potrebbe aiutare ad aggiungere le informazioni nel tuo primo commento alla domanda, era un po 'nebuloso.
James McMahon,

3

L'installazione di Python normalmente associa .py, .pywe .pycfile con l'interprete Python. Quindi puoi eseguire uno script Python facendo doppio clic su di esso in Explorer o digitando il suo nome in una finestra della riga di comando (quindi non è necessario digitare python scriptname.py, soloscriptname.py lo farà).

Se si desidera modificare manualmente questa associazione, è possibile modificare queste chiavi nel registro di 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

Le persone hanno lavorato su un launcher Python per Windows: un programma leggero associato a .pye .pywfile che avrebbero cercato una linea "shebang" (simile a Linux et al) sulla prima riga, e avviavano Python 2.xo 3.x come necessario. Vedi il post sul blog "Un Python Launcher per Windows" per i dettagli.


3

Prova a usare Anaconda.

Usando il concetto di ambienti Anaconda, supponiamo che tu abbia bisogno di Python 3 per imparare la programmazione, ma non vuoi cancellare il tuo ambiente Python 2.7 aggiornando Python. Puoi creare e attivare un nuovo ambiente chiamato "serpenti" (o qualunque cosa tu voglia) e installare l'ultima versione di Python 3 come segue:

conda create --name snakes python=3

È più semplice di quanto sembri, dai un'occhiata alla pagina di introduzione qui: Introduzione a Anaconda

E quindi per gestire il tuo problema specifico di avere versioni 2.xe 3.x in esecuzione fianco a fianco, vedi: Gestire le versioni di Python con Anaconda


Il collegamento introduttivo Anaconda è interrotto.
alex

1
Risolto il problema con il link "Introduzione a Anaconda".
Cale Sweeney,

2
@JeffreyCordero Ho corretto il collegamento. I documenti di Anaconda possono essere eseguiti, ma non possono nascondersi.
Cale Sweeney,

2

Ecco come eseguire Python 2 e 3 sulla stessa macchina

  1. installa Python 2.x
  2. installa Python 3.x
  3. Avvia Powershell
  4. Digitare Python -2 per avviare Python 2.x
  5. Digitare Python -3 per avviare Python 2.x

Il Python Launcher per Windows è stato incorporato in Python dalla versione 3.3, come promesso nel 2011, quando il primo stand alone fatto il suo debutto:

Python Launcher per Windows


Che dire delle persone che usano gli IDE? Funziona anche per quello?
emorfo

2

Ecco un modo ordinato e pulito per installare Python2 e Python3 su Windows.

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

Il mio caso: ho dovuto installare Apache cassandra. Avevo già installato Python3 nel mio disco D :. . Con un sacco di lavori di sviluppo in corso non volevo rovinare la mia installazione di Python3. E, avevo bisogno di Python2 solo per Apache cassandra.

Quindi ho preso i seguenti passi:

  1. Python2 scaricato e installato.
  2. Aggiunte voci Python2 a classpath ( C:\Python27;C:\Python27\Scripts)
  3. Modificato python.exe in python2.exe (come mostrato nell'immagine seguente)

inserisci qui la descrizione dell'immagine

  1. Ora sono in grado di eseguire entrambi. Per Python 2 ( python2 --version) e Python 3 ( python --version). inserisci qui la descrizione dell'immagine

Quindi, la mia installazione di Python3 è rimasta intatta.


1

Penso che ci sia un'opzione per impostare l'associazione dei file di Windows per i file .py nel programma di installazione. Deselezionalo e dovresti stare bene.

In caso contrario, puoi facilmente associare nuovamente i file .py alla versione precedente. Il modo più semplice è fare clic con il tasto destro su un file .py, selezionare "apri con" / "scegli programma". Nella finestra di dialogo che viene visualizzata, seleziona o cerca la versione di Python che desideri utilizzare per impostazione predefinita e seleziona la casella di controllo "Usa sempre questo programma per aprire questo tipo di file".


Questo è quello che ho fatto. Ho ancora 2.5.2 e 3.0.1 sulla mia scatola di Windows Vista. L'ho deselezionato nella procedura guidata di installazione (forse avrei detto qualcosa come "Registra con il sistema" - Ho dimenticato). Entrambi funzionano bene. Per quanto riguarda la riga di comando, ho inserito un file py.bat nel mio percorso che dà il via a Python 3 - niente di speciale, ma fa quello che mi serve.
Anon,

1

Dovresti assicurarti che la variabile di ambiente PATH non contenga entrambi i file python.exe (aggiungi quello che stai attualmente usando per eseguire gli script su base giornaliera), o fai come suggerito da Kniht con i file batch. A parte questo, non vedo perché no.

PS: ho installato 2.6 come mio pitone "primario" e 3.0 come mio pitone "play" . Il 2.6 è incluso nel PERCORSO . Tutto funziona bene.


1

Prima di installare entrambi contemporaneamente coraggiosamente, avevo tante domande. Se do python andrà a py3 quando voglio py2? pip / virtualenv avverrà in py2 / 3?

Sembra essere molto semplice ora.

Basta installarli entrambi alla cieca. Assicurati di ottenere il tipo giusto (x64 / x32). Durante / dopo l'installazione assicurati di aggiungere al percorso le variabili di ambiente .

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

Sostituisci la x nel comando sopra per impostare il percorso.

Quindi vai su entrambe le cartelle.

Navigare verso

python3.6/Scripts/

e rinominare pip in pip3.

Se pip3 esiste già, eliminare il pip. Questo assicurerà che solo pip funzionerà con python2 . Puoi verificare tramite:

pip --version

Nel caso in cui si desideri utilizzare pip con python3, utilizzare semplicemente

pip3 install 

Allo stesso modo puoi fare lo stesso con il file Python e altri.

Saluti!


1

Facile da usare, dopo aver installato entrambe le versioni di Python aggiungono i percorsi alle variabili di ambiente; vedi impostazioni delle variabili di ambiente. Quindi vai alle cartelle python 2 e python 3 e rinominale rispettivamente in python2 e python3 come mostrato qui per python2equi per python3 . Ora in cmd digitare python2 o python3 per utilizzare la versione richiesta, vedere Qui.


0

Suppongo di sì, ho Python 2.4, 2.5 e 2.6 installato fianco a fianco sullo stesso computer.


Che il mio lavoro per più versioni di 2.x, ma menta sta chiedendo se possono eseguire 2.x insieme a 3.x. Ci sono alcune differenze significative tra i due. Vedi: Differenze tra 2.xe 3.x
Cale Sweeney,

0

Sto iniziando con Python ora. Sto leggendo il libro di Zed Shaw "Learn Python the Hard Way" che richiede Python versione 2.x ma sto anche prendendo una classe che richiede Python 3.x

Quindi ecco cosa ho fatto.

  1. Scarica python 2.7
  2. eseguire power shell (dovrebbe già essere installato su Windows)
  3. eseguire python IN POWERSHELL (se non riconosce, andare al passaggio 4)
  4. Solo se powershell non riconosce il tipo python 2.7 nel modo seguente:

"[AMBIENTE] :: SETENVIRONMENTVARIABLE (" PERCORSO "," $ ENV: PERCORSO; C: \ PYTHON27 "," UTENTE ")" (senza virgolette esterne)

  1. Ora scrivi python e dovresti vederlo dire python 2.7 blah blah blah

ORA per python 3.x

Il download semplice e python 3.x viene fornito con l'app python per windows. Quindi aggiungi semplicemente l'app Python per Windows alla barra delle applicazioni o crea un collegamento sul desktop e il gioco è fatto!

Apri Python per Windows per 3.x

Apri Powershell per Python 2.x

Spero che aiuti!


0

Hmm..ho fatto subito scaricando Python 3.6.5 per Windows all'indirizzo https://www.python.org/downloads/release/python-365/ e assicurandomi che il programma di avvio fosse installato. Quindi, ho seguito le istruzioni per l'uso di Python 2 e Python 3. Riavviare il prompt dei comandi e quindi utilizzare py -2.7per utilizzare Python 2 e pyo py -3.6per utilizzare Python 3. È inoltre possibile utilizzare pip2per Python 2 pipe pipper Python 3 pip.


0

Ho avuto lo stesso problema in cui volevo usare python3 per la maggior parte del lavoro, ma IDA pro richiedeva python2. Quindi, ecco cosa ho fatto.

Ho prima creato 3 variabili nella variabile di ambiente utente come segue:

  1. PYTHON_ACTIVE: inizialmente vuoto
  2. HOME_PYTHON27: ha un percorso per una cartella in cui è installato Python 2. Per esempio. "; Scripts /;"
  3. HOME_PYTHON38: simile a Python 2, questa variabile contiene un percorso per le cartelle di Python 3.

Ora ho aggiunto

% PYTHON_ACTIVE%

alla variabile PATH. Quindi, sostanzialmente, dicendo che qualunque cosa contenga questo "PYTHON_ACTIVE" è il pitone attivo. Modifichiamo a livello di codice i contenuti di "PYTHON_ACTIVE" per cambiare la versione di Python.

Ecco lo script di esempio:

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

Questo script accetta la versione di Python come input e di conseguenza copia HOME_PYTHON27 o HOME_PYTHON38 in PYTHON_ACTIVE. Cambiando così la versione globale di Python.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.