Kann ich Python 3.x und 2.x auf demselben Windows-Computer installieren?


156

Ich verwende Windows und die Shell / das Betriebssystem führt Python automatisch basierend auf den Registrierungseinstellungen aus, wenn Sie ein Programm in der Befehlszeile ausführen. Wird dies unterbrochen, wenn ich eine 2.x- und 3.x-Version von Python auf demselben Computer installiere?

Ich möchte mit Python 3 spielen, während ich weiterhin 2.x-Skripte auf demselben Computer ausführen kann.


1
In meiner Distribution Fedora werden Python 2.7 um /usr/bin/pythonund Python 3.3 um installiert /usr/bin/python3. Gibt auch Python und IPython unterschiedliche Namen für Python3. Sehr praktisch.
Colonel Panic

19
@user - Im Geiste stimme ich Ihrer Antwort zu, aber ich bin so oft von diesem Geist verbrannt worden, dass ich verstehe, warum jemand fragen würde, bevor er den Sprung macht.
Peter Hanley

Die Antworten hier scheinen alles darüber zu sein, wie man wählt, welche Python wann ausgeführt werden soll. Mein Problem war, dass das Installationsprogramm (3.6.2) nicht ausgeführt werden konnte, da dort steht, dass eine andere Version dieses Produkts bereits installiert ist. Es stellte sich heraus, dass ich bereits 3.6.3 installiert hatte.
Jojo

Antworten:


66

Die offizielle Lösung für die Koexistenz scheint der Python Launcher für Windows , PEP 397, zu sein, der in Python 3.3.0 enthalten war . Installieren der Release-Dumps py.exeund pyw.exe-Starter in %SYSTEMROOT%( C:\Windows), die dann pybzw. pywSkripten zugeordnet sind.

Lassen Sie die Option "Erweiterungen registrieren" aktiviert, um den neuen Launcher zu verwenden (ohne manuell eigene Zuordnungen zu ihm einzurichten). Ich bin mir nicht ganz sicher warum, aber auf meinem Computer blieb Py 2.7 als "Standard" (des Launchers).

Wenn Sie Skripte ausführen, indem Sie sie direkt über die Befehlszeile aufrufen, werden sie durch den Launcher geleitet und der Shebang analysiert (falls vorhanden). Sie können den Launcher auch explizit aufrufen und Schalter verwenden : py -3 mypy2script.py.

Alle Arten von Schebangs scheinen zu funktionieren

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

sowie mutwillige Missbräuche

  • #! notepad.exe

"Sie" sollten Pylauncher wirklich in die aktuelle Python 2-Distribution für Windows aufnehmen (oder die Leute darauf aufmerksam machen, dass es verfügbar ist und wo es selbst erhältlich ist).
Martineau

1
Vielleicht, aber wenn Sie nur in der Python 2-Welt leben, ist das keine so große Sache.
Nick T

Dieser Launcher war mindestens seit Mitte 2012 als eigenständiges Programm verfügbar.
Smit Johnth


1
@Mooncrater können Sie überprüfen, mit welchen verwendet wird where.exe pip. Ich denke, das Python 3-Installationsprogramm installiert einen pip3Alias ​​für seinen Pip, aber Sie könnten auch so etwas tun, wie py -3 -m pip install requestsich denke.
Nick T

41

Hier ist mein Setup:

  1. Installieren Sie Python 2.7 und 3.4 mit den Windows-Installationsprogrammen .
  2. Gehen Sie zu C:\Python34(dem Standardinstallationspfad) und ändern Sie python.exe in python3.exe
  3. Bearbeiten Sie Ihre Umgebungsvariablen, um sie einzuschließenC:\Python27\;C:\Python27\Scripts\;C:\Python34\;C:\Python34\Scripts\;

Jetzt können Sie in der Befehlszeile pythonfür 2.7 und python3für 3.4 verwenden.


3
Was ist zum Beispiel mit pipcli?
Christian

3
Die neuesten Versionen von Python 2 & 3 werden mit Pip ausgeliefert. So können Sie verwenden pipund pip3jeweils.
Alistair Martin

8
Ich habe nur darauf hingewiesen, dass Sie am Ende alle diese Dienstprogramme umbenennen müssen. Selbst dann besteht die Gefahr, dass Dinge kaputt gehen, wenn beispielsweise Python3 explizit (z. B. fest codiert) pip und nicht pip3 aufruft.
Christian

Das ist eine schlechte Idee, würde am Ende alles umbenennen und pip funktioniert nicht so.
Bhansa

um zu verhindern, dass auf dem Python3 ein Pip-Problem auftritt. Sie benötigen UNSLECT "install pip" vom anfänglichen Python3-Installationsassistenten, benennen dann python3.7 / python.exe in python3.exe um, laden dann get-pip.py herunter und führen python3.exe get-pip.py aus. Pip3 weiß also, dass die umbenannte python3.exe für python3 nicht die ursprüngliche /python3.7/python.exe ist
Junchen Liu

36

Sie können beide installiert haben.

Sie sollten dies vor Ihr Skript schreiben:

#!/bin/env python2.7

oder schließlich ...

#!/bin/env python3.6

Aktualisieren

Meine Lösung funktioniert perfekt mit Unix. Nach einer schnellen Suche bei Google ist hier die Windows-Lösung:

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

Gleiches: vor Ihrem Drehbuch.


Wir können es unter Linux und auch unter Windows installieren. Sie müssen nur die env-Variable festlegen. Sie können dies unter Windows tun.
Patrick Desjardins

7
Diese Lösung funktioniert nicht mit Windows (es sei denn, Sie rufen sie über eine Unix-Shell (z. B. Cygwin) auf). Das #! wird von der Shell verarbeitet und von Windows nicht unterstützt. Ich glaube an das Beispiel, das Sie gegoogelt haben, dass es vom Webserver verarbeitet wird und nicht vom Start in Windows
Brian

Ja, unter Apache unter Windows ... die Frage-Anfrage-Shell automatisch, können Sie es mit Cygwin, Apache, etc ... tun
Patrick Desjardins

@ Daok: Ich habe dich nicht abgelehnt. Ich bin dankbar für Hilfe, auch für einen Versuch der Hilfe.
Minze

4
Man kann Pylauncher verwenden , um so etwas zum Laufen zu bringen (wie in PEP 397 - Python Launcher für Windows im Jahr 2011 beschrieben.
Martineau

33

Ab Version 3.3 führte Python das Dienstprogramm Launcher für Windows https://docs.python.org/3/using/windows.html#python-launcher-for-windows ein .

Um mehrere Versionen von Python verwenden zu können:

  1. Installieren Sie Python 2.x (x ist eine beliebige Version, die Sie benötigen)
  2. Installieren Sie Python 3.x (x ist eine beliebige Version, die Sie benötigen. Außerdem müssen Sie eine Version 3.x> = 3.3 haben.)
  3. Öffnen Sie die Eingabeaufforderung
  4. Typ py -2.x Python 2.x starten
  5. Typ py -3.x Python 3.x starten

1
Was ist mit Leuten, die IDEs verwenden? Funktioniert das auch dafür?
Emorphus

1
@emorphus Ich denke, hängt von der IDE ab, aber im Allgemeinen sollten Sie in der Lage sein, die Version des Interpreters zu wählen. Wenn Sie also mehrere Python-Versionen installiert haben, wählen Sie einfach die aus, die Sie in Ihrem Projekt verwenden möchten. Auch das Terminal in der IDE funktioniert genauso wie die Eingabeaufforderung, sodass diese Befehle auch dort funktionieren sollten.
Ivan Kucerak

2
Dies ist die beste Lösung IMO, es funktioniert perfekt von Anfang an. Sie brauchen nicht -3.x, das können Sie einfach tun py -3 filename.py.
OmegaNalphA

9

Ich verwende 2.5, 2.6 und 3.0 aus der Shell mit einzeiligen Batch-Skripten des Formulars:

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

Nennen Sie sie pythonX.Y.batund setzen Sie sie irgendwo in Ihren Pfad. Kopieren Sie die Datei für die bevorzugte Nebenversion (dh die neueste) nach pythonX.bat. (ZB copy python2.6.bat python2.bat) Dann können Sie python2 file.pyvon überall aus verwenden.

Dies hilft jedoch nicht oder beeinflusst nicht einmal die Windows-Dateizuordnungssituation. Dazu benötigen Sie ein Launcher-Programm, das die #!Zeile liest und diese dann mit .py- und .pyw-Dateien verknüpft.


Siehe meinen Kommentar zur Antwort von Patrick Desjardins.
Martineau

8

Wenn Sie beide zu Umgebungsvariablen hinzufügen, liegt ein Konflikt vor, da die beiden ausführbaren Dateien denselben Namen haben : python.exe.

Benennen Sie einfach einen von ihnen um. In meinem Fall habe ich es umbenannt in python3.exe.

Wenn ich pythones ausführe python.exe, wird es ausgeführt, was 2.7 ist, und wenn ich python3es ausführe python3.exe, wird es ausgeführt, was 3.6 ist

Geben Sie hier die Bildbeschreibung ein


Können Sie bitte den Notizteil näher erläutern? Wenn ich Python in Python3 umbenenne, kann ich pip nicht mehr ausführen, da pip.exe, pip3.exe und pip3.7.exe anscheinend alle von python.exe abhängen. Wenn ich pip starte, erhalte ich den Fehler => 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

Ich weiß nicht, dass ich dieses Problem nicht hatte
Charif DZ

@MandarSadye Sie können pip.exe im Editor öffnen und nach python.exe suchen. Ersetzen Sie dann python.exe durch python3.exe
Uhr

7

Bitte schön...

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)

Ich habe das gerade beim Lesen dieses Threads durcheinander gebracht (weil es das ist, was ich auch brauchte). Ich habe Pythons 2.6.1 und 3.0.1 unter Ubuntu und Windows. Wenn es bei Ihnen nicht funktioniert, veröffentlichen Sie hier Korrekturen.


1
Besser wäre es sys.exit(process.returncode), den Exit-Status des aufgerufenen Skripts an den Aufrufer weiterzugeben.
Martineau

4

Soweit ich weiß, läuft Python mit der PATH-Variablen im Gegensatz zu einer Registrierungseinstellung über die Befehlszeile.

Wenn Sie also auf Ihrem PATH auf die richtige Version verweisen, werden Sie diese verwenden. Denken Sie daran, Ihre Eingabeaufforderung neu zu starten, um die neuen PATH-Einstellungen zu verwenden.


Dies ist wahr, wenn Sie 'python myscript.py' eingeben, können Sie stattdessen C: \ python30 \ python.exe eingeben. Die Eingabeaufforderung führt dies jedoch automatisch aus, wenn Sie nur myscript.py eingeben und die 2 nicht brechen möchten. ? Skripte, wenn ich 3.0 auf demselben Computer installiere.
Minze

Oh und minty, es könnte helfen, die Informationen in Ihrem ersten Kommentar zu der Frage hinzuzufügen, es war ein wenig nebulös.
James McMahon

3

Die Python - Installation normalerweise zuordnet .py, .pywund .pycDateien , die mit dem Python - Interpreter. Sie können ein Python-Skript also ausführen, indem Sie entweder im Explorer darauf doppelklicken oder seinen Namen in ein Befehlszeilenfenster eingeben (Sie müssen also nicht eingeben python scriptname.py, es reicht einfach aus scriptname.py).

Wenn Sie diese Zuordnung manuell ändern möchten, können Sie diese Schlüssel in der Windows-Registrierung bearbeiten:

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

Die Menschen wurden für Windows auf einem Python Launcher arbeiten: ein leichtes Programm zugeordnet .pyund .pywDateien , die für eine „shebang“ Linie aussehen würde (ähnlich wie Linux et al) in der ersten Zeile, und starten Sie Python 2.x oder 3.x als erforderlich. Weitere Informationen finden Sie im Blogbeitrag "Ein Python Launcher für Windows" .


3

Versuchen Sie es mit Anaconda.

Angenommen, Sie benötigen Python 3, um das Programmieren zu erlernen, aber Sie möchten Ihre Python 2.7-Umgebung nicht durch Aktualisieren von Python löschen. Sie können eine neue Umgebung mit dem Namen "snakes" (oder was auch immer Sie möchten) erstellen und aktivieren und die neueste Version von Python 3 wie folgt installieren:

conda create --name snakes python=3

Es ist einfacher als es sich anhört. Schauen Sie sich die Intro-Seite hier an: Erste Schritte mit Anaconda

Weitere Informationen zu Ihrem spezifischen Problem, dass Version 2.x und 3.x nebeneinander ausgeführt werden, finden Sie unter: Verwalten von Python-Versionen mit Anaconda


Der Anaconda-Intro-Link ist unterbrochen.
Alex

1
Der Link zu "Erste Schritte mit Anaconda" wurde behoben.
Cale Sweeney

2
@ JeffreyCordero Ich habe den Link behoben. Anaconda-Dokumente können ausgeführt werden, aber sie können sich nicht verstecken.
Cale Sweeney

2

Hier erfahren Sie, wie Sie Python 2 und 3 auf demselben Computer ausführen

  1. Installieren Sie Python 2.x.
  2. Installieren Sie Python 3.x.
  3. Starten Sie Powershell
  4. Geben Sie Python -2 ein , um Python 2.x zu starten
  5. Geben Sie Python -3 ein , um Python 2.x zu starten

Der Python Launcher für Windows wurde seit Version 3.3 in Python eingebettet, wie 2011 versprochen, als der Stand Alone erstmals vorgestellt wurde:

Python Launcher für Windows


Was ist mit Leuten, die IDEs verwenden? Funktioniert das auch dafür?
Emorphus

2

Hier ist eine saubere und saubere Möglichkeit, Python2 und Python3 unter Windows zu installieren.

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

Mein Fall: Ich musste Apache Cassandra installieren. Ich hatte Python3 bereits auf meinem Laufwerk D: installiert . Mit viel Entwicklungsarbeit wollte ich meine Python3-Installation nicht durcheinander bringen. Und ich brauchte Python2 nur für Apache Cassandra.

Also habe ich folgende Schritte unternommen:

  1. Heruntergeladen und installiert Python2.
  2. Python2-Einträge zu classpath ( C:\Python27;C:\Python27\Scripts) hinzugefügt
  3. Modifizierte python.exe zu python2.exe (wie unten im Bild gezeigt)

Geben Sie hier die Bildbeschreibung ein

  1. Jetzt kann ich beide ausführen. Für Python 2 ( python2 --version) und Python 3 ( python --version). Geben Sie hier die Bildbeschreibung ein

Meine Python3-Installation blieb also erhalten.


1

Ich denke, es gibt eine Option, um die Windows-Dateizuordnung für .py-Dateien im Installationsprogramm einzurichten. Deaktivieren Sie es und es sollte Ihnen gut gehen.

Wenn nicht, können Sie .py-Dateien problemlos wieder mit der vorherigen Version verknüpfen. Am einfachsten ist es, mit der rechten Maustaste auf eine .py-Datei zu klicken und "Öffnen mit" / "Programm auswählen" auszuwählen. Wählen Sie im angezeigten Dialogfeld die Python-Version aus oder navigieren Sie zu dieser, die Sie standardmäßig verwenden möchten, und aktivieren Sie das Kontrollkästchen "Verwenden Sie dieses Programm immer, um diese Art von Datei zu öffnen".


Das habe ich getan. Ich habe noch 2.5.2 und 3.0.1 auf meiner Windows Vista-Box. Ich habe das im Installationsassistenten deaktiviert (möglicherweise etwas wie "Beim System registrieren" gesagt - ich habe es vergessen). Beide funktionieren gut. Für Kommandozeilen-Inhalte habe ich eine py.bat-Datei in meinen Pfad eingefügt, mit der Python 3 gestartet wird - nichts Besonderes, aber es tut, was ich brauche.
Anon

1

Sie sollten sicherstellen, dass die Umgebungsvariable PATH nicht beide python.exe-Dateien enthält (fügen Sie die Datei hinzu, die Sie derzeit zum täglichen Ausführen von Skripten verwenden), oder tun Sie, was Kniht mit den Batchdateien vorgeschlagen hat. Abgesehen davon verstehe ich nicht, warum nicht.

PS: Ich habe 2.6 als "primäre" Python und 3.0 als "Play" -Python installiert . Die 2.6 ist im PATH enthalten . Alles funktioniert gut.


1

Bevor ich beide gleichzeitig mutig installiert habe, hatte ich so viele Fragen. Wenn ich Python gebe, geht es dann zu py3, wenn ich py2 will? pip / virtualenv wird unter py2 / 3 passieren?

Es scheint jetzt sehr einfach zu sein.

Installieren Sie beide einfach blind. Stellen Sie sicher, dass Sie den richtigen Typ erhalten (x64 / x32). Stellen Sie während / nach der Installation sicher, dass Sie dem Pfad zu Ihren Umgebungsvariablen hinzufügen .

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

Ersetzen Sie das x im obigen Befehl, um den Pfad festzulegen.

Gehen Sie dann zu beiden Ordnern.

Navigieren Sie zu

python3.6/Scripts/

und benenne pip in pip3 um.

Wenn pip3 bereits vorhanden ist, löschen Sie den pip. Dadurch wird sichergestellt, dass nur pip unter python2 ausgeführt wird . Sie können Folgendes überprüfen:

pip --version

Wenn Sie pip mit python3 verwenden möchten, verwenden Sie einfach

pip3 install 

Sie können das Gleiche auch für Python-Dateien und andere tun.

Prost!


1

Einfach, nach der Installation beider Python-Versionen fügen Sie die Pfade zu den Umgebungsvariablen hinzu; siehe Einstellungen für Umgebungsvariablen. Wechseln Sie dann zu den Ordnern Python 2 und Python 3 und benennen Sie sie wie gezeigt hier für python2und in Python2 bzw. Python3 um hier für python3. Geben Sie nun in cmd python2 oder python3 ein, um die gewünschte Version zu verwenden Hier.


0

Ich würde davon ausgehen, dass Python 2.4, 2.5 und 2.6 nebeneinander auf demselben Computer installiert sind.


Dass meine Arbeit für mehrere Versionen von 2.x, aber Minty fragt, ob sie 2.x neben 3.x ausführen können. Es gibt einige signifikante Unterschiede zwischen den beiden. Siehe: Unterschiede zwischen 2.x und 3.x
Cale Sweeney

0

Ich fange gerade erst mit Python an. Ich lese Zed Shaws Buch "Learn Python the Hard Way", für das Python Version 2.x erforderlich ist, nehme aber auch an einer Klasse teil, für die Python 3.x erforderlich ist

Also hier ist was ich getan habe.

  1. Laden Sie Python 2.7 herunter
  2. Power Shell ausführen (sollte bereits unter Windows installiert sein)
  3. Führen Sie Python IN POWERSHELL aus (wenn es nicht erkannt wird, fahren Sie mit Schritt 4 fort.)
  4. Nur wenn Powershell Python 2.7 nicht erkennt, geben Sie Folgendes ein:

"[UMWELT] :: SETENVIRONMENTVARIABLE (" PATH "," $ ENV: PATH; C: \ PYTHON27 "," USER ")" (keine Anführungszeichen)

  1. Geben Sie nun Python ein und Sie sollten sehen, dass Python 2.7 bla bla bla sagt

JETZT für Python 3.x.

Der einfache Download von Python 3.x wird mit der Python für Windows-App geliefert. Stecken Sie einfach die Python für Windows-App in Ihre Taskleiste oder erstellen Sie eine Verknüpfung zum Desktop, und fertig!

Öffnen Sie Python für Windows für 3.x.

Öffnen Sie Powershell für Python 2.x.

Ich hoffe das hilft!


0

Hmm..Ich habe dies jetzt getan, indem ich Python 3.6.5 für Windows unter https://www.python.org/downloads/release/python-365/ heruntergeladen und sichergestellt habe, dass der Launcher installiert wird. Dann habe ich die Anweisungen zur Verwendung von Python 2 und Python 3 befolgt. Starten Sie die Eingabeaufforderung neu und verwenden Sie dann py -2.7Python 2 und / pyoder py -3.6Python 3. Sie können auch pip2Python 2 pipund pipPython 3 verwenden pip.


0

Ich hatte das gleiche Problem, bei dem ich Python3 für die meisten Arbeiten verwenden wollte, aber IDA Pro benötigte Python2. Also, hier ist was ich getan habe.

Ich habe zuerst 3 Variablen in der Benutzerumgebungsvariablen wie folgt erstellt:

  1. PYTHON_ACTIVE: Dies ist zunächst leer
  2. HOME_PYTHON27: Hat einen Pfad zu einem Ordner, in dem Python 2 installiert ist. Z.B. "; / scripts;"
  3. HOME_PYTHON38: Ähnlich wie in Python 2 enthält diese Variable einen Pfad zu Python 3-Ordnern.

Jetzt habe ich hinzugefügt

% PYTHON_ACTIVE%

zu PATH Variable. Im Grunde genommen ist das, was dieses "PYTHON_ACTIVE" enthält, die aktive Python. Wir ändern programmgesteuert die Inhalte von "PYTHON_ACTIVE", um die Python-Version zu wechseln.

Hier ist das Beispielskript:

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

Dieses Skript verwendet die Python-Version als Eingabe und kopiert entsprechend HOME_PYTHON27 oder HOME_PYTHON38 nach PYTHON_ACTIVE. Dadurch wird die globale Python-Version geändert.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.