Puis-je installer Python 3.x et 2.x sur le même ordinateur Windows?

156

J'exécute Windows et le shell / OS exécute automatiquement Python en fonction des paramètres de registre lorsque vous exécutez un programme sur la ligne de commande. Cela sera-t-il interrompu si j'installe une version 2.x et 3.x de Python sur la même machine?

Je veux jouer avec Python 3 tout en étant capable d'exécuter des scripts 2.x sur la même machine.

menthe
la source
1
Dans ma distribution, Fedora, il installe Python 2.7 sur /usr/bin/pythonet Python 3.3 sur /usr/bin/python3. Donne également des noms différents pour Pip et IPython de Python3. Très utile.
Colonel Panic
19
@user - Dans l'esprit, je suis d'accord avec votre réponse, mais j'ai été brûlé par cet esprit tellement de fois que je comprends pourquoi quelqu'un demanderait avant de faire le saut.
Peter Hanley
Les réponses ici semblent concerner la manière de choisir quel python exécuter et quand. Mon problème était que le programme d'installation (3.6.2) ne fonctionnait pas car il indique "Une autre version de ce produit est déjà installée". Il s'avère que j'avais déjà installé 3.6.3.
yoyo

Réponses:

66

La solution officielle pour la coexistence semble être le lanceur Python pour Windows , PEP 397 qui a été inclus dans Python 3.3.0 . L'installation des vidages de version py.exeet des pyw.exelanceurs dans %SYSTEMROOT%( C:\Windows) qui est ensuite associé à pyet des pywscripts, respectivement.

Pour utiliser le nouveau lanceur (sans y configurer manuellement vos propres associations), laissez l'option «Enregistrer les extensions» activée. Je ne sais pas trop pourquoi, mais sur ma machine, il a laissé Py 2.7 comme "défaut" (du lanceur).

L'exécution de scripts en les appelant directement à partir de la ligne de commande les acheminera via le lanceur et analysera le shebang (s'il existe). Vous pouvez également appeler explicitement le lanceur et l' utilisation des commutateurs: py -3 mypy2script.py.

Toutes sortes de shebangs semblent fonctionner

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

ainsi que des abus gratuits

  • #! notepad.exe
Nick T
la source
«Ils» devraient vraiment inclure pylauncher avec la distribution actuelle de Python 2 pour Windows (ou rendre les gens plus conscients qu'il est disponible et où l'obtenir eux-mêmes).
martineau
1
Peut-être, mais si vous vivez simplement dans le monde Python 2, ce n'est pas si grave.
Nick T
Ce lanceur était disponible en tant que programme autonome au moins depuis la mi-2012.
Smit Johnth
1
@Mooncrater, vous pouvez vérifier avec qui sera utilisé where.exe pip. Je pense que le programme d'installation de Python 3 installe un pip3alias pour son pip, mais vous pouvez également faire quelque chose comme py -3 -m pip install requestsje pense.
Nick T
41

Voici ma configuration:

  1. Installez à la fois Python 2.7 et 3.4 avec les programmes d' installation de Windows .
  2. Accédez à C:\Python34(le chemin d'installation par défaut) et remplacez python.exe par python3.exe
  3. Modifiez vos variables d'environnement pour inclureC:\Python27\;C:\Python27\Scripts\;C:\Python34\;C:\Python34\Scripts\;

Maintenant, en ligne de commande, vous pouvez utiliser pythonpour 2.7 et python3pour 3.4.

Alistair Martin
la source
3
Qu'en est-il, par exemple, pipdans cli?
Christian
3
Les dernières versions de python 2 et 3 sont livrées avec pip. Vous pouvez donc utiliser pipet pip3respectivement.
Alistair Martin
8
Je faisais simplement remarquer que vous finiriez par devoir renommer tous ces utilitaires. Même dans ce cas, il y a un risque que les choses se cassent si, par exemple, python3 explicitement (par exemple: codé en dur) appelle pip et non pip3.
Christian
C'est une mauvaise idée, finirait par renommer tout et pip ne fonctionne pas de cette façon.
bhansa le
pour arrêter de rencontrer un problème de pip sur le python3. vous avez besoin d'UNSLECT "install pip" de l'assistant d'installation initial de python3, puis renommez python3.7 / python.exe en python3.exe, PUIS téléchargez get-pip.py et exécutez python3.exe get-pip.py. Ainsi, le pip3 sait que le python3.exe renommé est pour python3 et non pour le /python3.7/python.exe d'origine
Junchen Liu
36

Vous pouvez avoir les deux installés.

Vous devriez écrire ceci devant votre script:

#!/bin/env python2.7

ou, éventuellement ...

#!/bin/env python3.6

Mettre à jour

Ma solution fonctionne parfaitement avec Unix, après une recherche rapide sur Google , voici la solution Windows:

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

Même chose: devant votre script.

Patrick Desjardins
la source
WEll, il peut être installé sur Linux, et peut également l'être sur Windows. Il vous suffit de définir la variable env .. vous pouvez le faire sous Windows ...
Patrick Desjardins
7
Cette solution ne fonctionnera pas avec Windows (à moins que vous ne l'appeliez depuis un shell de style Unix (par exemple cygwin)). Le #! est géré par le shell et Windows ne le prend pas en charge. Je crois que dans l'exemple que vous avez googlé, il est géré par le serveur Web, et non par le lancement de Windows
Brian
Ouais, sur Apache sous Windows ... le shell de demande de question automatiquement, vous pouvez le faire avec Cygwin, Apache, etc ...
Patrick Desjardins
@Daok: Je ne vous ai pas voté contre. Je suis reconnaissant de l'aide, même une tentative d'aide.
minty
4
On peut utiliser pylauncher pour faire quelque chose comme ça (comme décrit dans PEP 397 - Lanceur Python pour Windows en 2011.
martineau
33

À partir de la version 3.3, Python a introduit l'utilitaire Launcher pour Windows https://docs.python.org/3/using/windows.html#python-launcher-for-windows .

Donc, pour pouvoir utiliser plusieurs versions de Python:

  1. installez Python 2.x (x est la version dont vous avez besoin)
  2. installez Python 3.x (x est une version dont vous avez besoin et vous devez avoir une version 3.x> = 3.3)
  3. ouvrir l'invite de commande
  4. tapez py -2.x pour lancer Python 2.x
  5. tapez py -3.x pour lancer Python 3.x
Ivan Kucerak
la source
1
Qu'en est-il des personnes qui utilisent des IDE? Est-ce que ça marche aussi pour ça?
emorphus
1
@emorphus, je suppose, dépend de l'EDI mais en général, vous devriez pouvoir choisir la version de l'interpréteur. Donc, si vous avez plusieurs versions de Python installées, choisissez simplement celle que vous souhaitez utiliser dans votre projet. Le terminal de l'EDI fonctionne également de la même manière que l'invite de commande, de sorte que ces commandes devraient également y fonctionner.
Ivan Kucerak
2
C'est la meilleure solution IMO, elle fonctionne parfaitement dès le départ. Vous n'avez pas besoin d'avoir -3.x, vous pouvez simplement le faire py -3 filename.py.
OmegaNalphA
9

J'utilise 2.5, 2.6 et 3.0 à partir du shell avec des scripts batch d'une ligne de la forme:

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

Nommez-les pythonX.Y.batet placez-les quelque part dans votre PATH. Copiez le fichier de la version mineure préférée (c'est-à-dire la dernière) dans pythonX.bat. (Par exemple copy python2.6.bat python2.bat) Ensuite, vous pouvez utiliser python2 file.pyde n'importe où.

Cependant, cela n'aide ni même n'affecte la situation d'association de fichiers Windows. Pour cela, vous aurez besoin d'un programme de lancement qui lit la #!ligne, puis associez-le aux fichiers .py et .pyw.

Communauté
la source
Voir mon commentaire sur la réponse de Patrick Desjardins.
martineau
8

Lorsque vous ajoutez les deux variables d'environnement , il y aura un un conflit parce que les deux exécutables ont le même nom: python.exe.

Renommez simplement l'un d'entre eux. Dans mon cas, je l'ai renommé python3.exe.

Donc, quand je l'exécute, pythonil s'exécute, python.exequi est de 2,7 et lorsque je l'exécute, python3il s'exécute python3.exequi est de 3,6

entrez la description de l'image ici

Charif DZ
la source
Pouvez-vous s'il vous plaît élaborer la partie note? Lorsque je renomme python en python3, je ne peux plus exécuter pip car il semble que pip.exe, pip3.exe et pip3.7.exe dépendent tous de python.exe. Lorsque je lance pip, j'obtiens une erreur => 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
Je ne sais pas que je n'ai pas eu ce problème
Charif DZ
@MandarSadye Vous pouvez ouvrir PIP.EXE dans le bloc - notes et recherche de python.exe .. Puis remplacer python.exe avec python3.exe
atg
7

Voici...

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)

Je viens de frapper ceci en lisant ce fil (parce que c'est ce dont j'avais besoin aussi). J'ai Pythons 2.6.1 et 3.0.1 sur Ubuntu et Windows. Si cela ne fonctionne pas pour vous, postez des correctifs ici.


la source
1
Serait préférable d'utiliser sys.exit(process.returncode)pour propager l'état de sortie du script appelé à l'appelant.
martineau
4

Pour autant que je sache, Python s'exécute à partir de la ligne de commande en utilisant la variable PATH par opposition à un paramètre de registre.

Donc, si vous pointez vers la version correcte sur votre PATH, vous l'utiliserez. N'oubliez pas de redémarrer votre invite de commande pour utiliser les nouveaux paramètres PATH.

James McMahon
la source
Cela est vrai si vous tapez 'python myscript.py', vous pouvez alors taper C: \ python30 \ python.exe à la place, mais l'invite de commande le fait automatiquement si vous tapez simplement myscript.py et que je ne veux pas casser le 2. ? scripts si j'installe 3.0 sur la même machine.
minty
Oh et menthe ça pourrait aider d'ajouter les informations de votre premier commentaire à la question, c'était un peu un peu nébuleux.
James McMahon
3

L'installation Python associe normalement .py, .pywet les .pycfichiers à l'interpréteur Python. Vous pouvez donc exécuter un script Python soit en double-cliquant dessus dans l'Explorateur, soit en tapant son nom dans une fenêtre de ligne de commande (donc pas besoin de taper python scriptname.py, scriptname.pyça fera juste ).

Si vous souhaitez modifier manuellement cette association, vous pouvez modifier ces clés dans le registre 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

Lanceur Python

Les gens ont travaillé sur un lanceur Python pour Windows: un programme léger associé à .pyet des .pywfichiers qui chercheraient une ligne "shebang" (similaire à Linux et al) sur la première ligne, et lancent Python 2.x ou 3.x comme obligatoire. Voir l'article de blog «Un lanceur Python pour Windows» pour plus de détails.

Craig McQueen
la source
3

Essayez d'utiliser Anaconda.

En utilisant le concept d'environnements Anaconda, disons que vous avez besoin de Python 3 pour apprendre la programmation, mais que vous ne voulez pas effacer votre environnement Python 2.7 en mettant à jour Python. Vous pouvez créer et activer un nouvel environnement nommé "snakes" (ou ce que vous voulez), et installer la dernière version de Python 3 comme suit:

conda create --name snakes python=3

C'est plus simple qu'il n'y paraît, jetez un œil à la page d'introduction ici: Premiers pas avec Anaconda

Et puis pour gérer votre problème spécifique d'avoir les versions 2.x et 3.x exécutées côte à côte, voir: Gérer les versions de Python avec Anaconda

Cale Sweeney
la source
Le lien d'introduction d'Anaconda est rompu.
alex
1
Correction du lien vers «Premiers pas avec Anaconda».
Cale Sweeney
2
@JeffreyCordero J'ai corrigé le lien. Les documents Anaconda peuvent fonctionner, mais ils ne peuvent pas se cacher.
Cale Sweeney
2

Voici comment exécuter Python 2 et 3 sur la même machine

  1. installer Python 2.x
  2. installer Python 3.x
  3. Démarrez Powershell
  4. Tapez Python -2 pour lancer Python 2.x
  5. Tapez Python -3 pour lancer Python 2.x

Le lanceur Python pour Windows été intégré à Python depuis la version 3.3, comme promis en 2011 lorsque le Stand alone a fait ses débuts:

Python Launcher pour Windows

rogerwamba
la source
Qu'en est-il des personnes qui utilisent des IDE? Est-ce que ça marche aussi pour ça?
emorphus
2

Voici un moyen soigné et propre d'installer Python2 et Python3 sur Windows.

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

Mon cas: j'ai dû installer Apache cassandra. J'ai déjà installé Python3 dans mon lecteur D: . Avec beaucoup de travail de développement en cours, je ne voulais pas gâcher mon installation Python3. Et, j'avais besoin de Python2 uniquement pour Apache cassandra.

J'ai donc pris les mesures suivantes:

  1. Python2 téléchargé et installé.
  2. Ajout d'entrées Python2 à classpath ( C:\Python27;C:\Python27\Scripts)
  3. Modification de python.exe en python2.exe (comme indiqué dans l'image ci-dessous)

entrez la description de l'image ici

  1. Maintenant, je peux exécuter les deux. Pour Python 2 ( python2 --version) et Python 3 ( python --version). entrez la description de l'image ici

Ainsi, mon installation Python3 est restée intacte.

Alex
la source
1

Je pense qu'il existe une option pour configurer l'association de fichiers Windows pour les fichiers .py dans le programme d'installation. Décochez-le et tout devrait aller bien.

Sinon, vous pouvez facilement réassocier les fichiers .py à la version précédente. Le moyen le plus simple est de faire un clic droit sur un fichier .py, sélectionnez «ouvrir avec» / «choisir un programme». Dans la boîte de dialogue qui apparaît, sélectionnez ou recherchez la version de python que vous souhaitez utiliser par défaut et cochez la case "Toujours utiliser ce programme pour ouvrir ce type de fichier".

Brian
la source
C'est ce que j'ai fait. J'ai toujours 2.5.2 et 3.0.1 sur ma boîte Windows Vista. J'ai décoché cela dans l'assistant d'installation (j'aurais peut-être dit quelque chose comme "S'inscrire avec le système" - j'oublie). Les deux fonctionnent bien. Pour les commandes en ligne, j'ai mis un fichier py.bat dans mon chemin qui lance python 3 - rien d'extraordinaire, mais fait ce dont j'ai besoin.
Anon du
1

Vous devez vous assurer que la variable d'environnement PATH ne contient pas les deux fichiers python.exe (ajoutez celui que vous utilisez actuellement pour exécuter des scripts au quotidien), ou faites comme Kniht suggéré avec les fichiers de commandes. A part ça, je ne vois pas pourquoi.

PS: J'ai installé 2.6 comme mon python "principal" et 3.0 comme mon python "play" . Le 2.6 est inclus dans le PATH . Tout fonctionne bien.

Géo
la source
1

Avant d'installer courageusement les deux simultanément, j'avais tellement de questions. Si je donne python, ira-t-il à py3 quand je veux py2? pip / virtualenv se produira sous py2 / 3?

Cela semble très simple maintenant.

Installez simplement les deux à l'aveuglette. Assurez-vous d'avoir le bon type (x64 / x32). Pendant / après l'installation, assurez-vous d'ajouter le chemin d'accès à vos variables d'environnement .

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

Remplacez le x dans la commande ci-dessus pour définir le chemin.

Accédez ensuite aux deux dossiers.

Aller vers

python3.6/Scripts/

et renommez pip en pip3.

Si pip3 existe déjà, supprimez le pip. Cela garantira que seul pip fonctionnera sous python2 . Vous pouvez vérifier par:

pip --version

Si vous souhaitez utiliser pip avec python3, utilisez simplement

pip3 install 

Vous pouvez également faire de même avec un fichier python et d'autres.

À votre santé!

Shreyaa Sridhar
la source
1

Facile, après avoir installé les deux versions de python, ajoutez les chemins aux variables d'environnement; voir paramètres de variable d'environnement. Accédez ensuite aux dossiers python 2 et python 3 et renommez-les respectivement en python2 et python3 comme indiqué ici pour python2et ici pour python3. Maintenant, dans cmd, tapez python2 ou python3 pour utiliser votre version requise, voir ici.

nilakantha singh deo
la source
0

Je suppose que oui, j'ai Python 2.4, 2.5 et 2.6 installés côte à côte sur le même ordinateur.


la source
C'est mon travail pour plusieurs versions de 2.x, mais minty demande s'ils peuvent exécuter 2.x aux côtés de 3.x. Il existe des différences significatives entre les deux. Voir: Différences entre 2.x et 3.x
Cale Sweeney
0

Je ne fais que commencer avec python maintenant. Je lis le livre de Zed Shaw "Learn Python the Hard Way" qui nécessite la version 2.x de python mais je prends également une classe qui nécessite python 3.x

Voici donc ce que j'ai fait.

  1. Télécharger python 2.7
  2. exécuter Power Shell (devrait déjà être installé sur Windows)
  3. exécutez python IN POWERSHELL (s'il ne reconnaît pas, passez à l'étape 4)
  4. Uniquement si PowerShell ne reconnaît pas le type de python 2.7 dans ce qui suit:

"[ENVIRONNEMENT] :: SETENVIRONMENTVARIABLE (" PATH "," $ ENV: PATH; C: \ PYTHON27 "," USER ")" (pas de guillemets extérieurs)

  1. Maintenant, tapez python et vous devriez le voir dire python 2.7 bla bla bla

MAINTENANT pour python 3.x

Le téléchargement simple de python 3.x est fourni avec l'application python pour Windows. Alors épinglez simplement l'application Python pour Windows à votre barre des tâches ou créez un raccourci vers le bureau et vous avez terminé!

Ouvrez Python pour Windows pour 3.x

Ouvrez Powershell pour python 2.x

J'espère que ça aide!

Davidopopoplis
la source
0

Hmm..Je l'ai fait pour le moment en téléchargeant simplement Python 3.6.5 pour Windows à https://www.python.org/downloads/release/python-365/ et je me suis assuré que le lanceur serait installé. Ensuite, j'ai suivi les instructions pour utiliser python 2 et python 3. Redémarrez l'invite de commande puis utilisez py -2.7pour utiliser Python 2 et pyou py -3.6pour utiliser Python 3. Vous pouvez également utiliser pip2pour Python 2 pipet pippour Python 3 pip.

IntrépideAvenir
la source
0

J'ai eu le même problème lorsque je voulais utiliser python3 pour la plupart des travaux, mais IDA pro avait besoin de python2. SO, voici ce que j'ai fait.

J'ai d'abord créé 3 variables dans la variable d'environnement utilisateur comme suit:

  1. PYTHON_ACTIVE: Ceci est initialement vide
  2. HOME_PYTHON27: a un chemin vers un dossier où Python 2 est installé. Par exemple. "; / scripts;"
  3. HOME_PYTHON38: Semblable à python 2, cette variable contient un chemin vers les dossiers python 3.

Maintenant j'ai ajouté

% PYTHON_ACTIVE%

à la variable PATH. Donc, en gros, ce que contient ce "PYTHON_ACTIVE" est le python actif. Nous modifions par programme le contenu de "PYTHON_ACTIVE" pour changer de version de python.

Voici l'exemple de script:

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

Ce script prend la version python en entrée et copie en conséquence HOME_PYTHON27 ou HOME_PYTHON38 dans PYTHON_ACTIVE. Changer ainsi la version globale de Python.

Mandar Sadye
la source