Czy mogę zainstalować Python 3.x i 2.x na tym samym komputerze z systemem Windows?

156

Używam systemu Windows, a powłoka / system operacyjny automatycznie uruchamia Python w oparciu o ustawienia rejestru, gdy uruchamiasz program w wierszu poleceń. Czy to się skończy, jeśli zainstaluję wersję 2.xi 3.x Pythona na tym samym komputerze?

Chcę bawić się Pythonem 3, jednocześnie mając możliwość uruchamiania skryptów 2.x na tej samej maszynie.

miętowy
źródło
1
W mojej dystrybucji, Fedorze, instaluje Python 2.7 na /usr/bin/pythoni Python 3.3 na /usr/bin/python3. Daje także różne nazwy dla Pip i IPython w Pythonie3. Bardzo poręczne.
Colonel Panic
19
@user - W duchu zgadzam się z twoją odpowiedzią, ale zostałem spalony przez tego ducha tyle razy, że rozumiem, dlaczego ktoś pytał przed wykonaniem skoku.
Peter Hanley,
Wydaje się, że odpowiedzi tutaj dotyczą tego, jak wybrać, który Python i kiedy uruchomić. Mój problem polegał na tym, że instalator (3.6.2) nie działał, ponieważ wyświetlał komunikat „Inna wersja tego produktu jest już zainstalowana”. Okazuje się, że miałem już zainstalowany 3.6.3.
jojo

Odpowiedzi:

66

Wydaje się, że oficjalnym rozwiązaniem koegzystencji jest Python Launcher dla Windows , PEP 397, który został zawarty w Pythonie 3.3.0 . Instalowanie zrzutów wydania py.exei programów pyw.exeuruchamiających w %SYSTEMROOT%( C:\Windows), które są następnie powiązane odpowiednio ze skryptami pyi pyw.

Aby korzystać z nowego programu uruchamiającego (bez ręcznego tworzenia z nim własnych powiązań), pozostaw włączoną opcję „Zarejestruj rozszerzenia”. Nie jestem do końca pewien, dlaczego, ale na moim komputerze pozostawiono Py 2.7 jako „domyślne” (w programie uruchamiającym).

Uruchamianie skryptów przez wywołanie ich bezpośrednio z wiersza poleceń przekieruje je przez program uruchamiający i przeanalizuje shebang (jeśli istnieje). Można również jawnie wywołać wyrzutni i używać przełączników: py -3 mypy2script.py.

Wydaje się, że wszystkie rodzaje grzywki działają

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

a także bezmyślne nadużycia

  • #! notepad.exe
Nick T.
źródło
„Oni” naprawdę powinni włączyć pylauncher do aktualnej dystrybucji Pythona 2 dla Windows (lub uświadomić ludziom, że jest dostępny i gdzie sami go zdobyć).
martineau
1
Być może, ale jeśli po prostu żyjesz w świecie Pythona 2, nie jest to aż tak wielka sprawa.
Nick T
Ten program uruchamiający był dostępny jako samodzielny program co najmniej od połowy 2012 r.
Smit Johnth
1
@Mooncrater możesz sprawdzić, który będzie używany z where.exe pip. Myślę, że instalator Pythona 3 instaluje pip3alias dla swojego pip, ale możesz też zrobić coś takiego py -3 -m pip install requests, jak myślę.
Nick T
41

Oto moja konfiguracja:

  1. Zainstaluj Python 2.7 i 3.4 z instalatorami systemu Windows .
  2. Przejdź do C:\Python34(domyślna ścieżka instalacji) i zmień python.exe na python3.exe
  3. Edytuj zmienne środowiskowe, aby je uwzględnićC:\Python27\;C:\Python27\Scripts\;C:\Python34\;C:\Python34\Scripts\;

Teraz w linii poleceń możesz używać pythondla 2.7 i python33.4.

Alistair Martin
źródło
3
A co na przykład pipw CLI?
Christian
3
Najnowsze wersje Pythona 2 i 3 są dostarczane z pip. Możesz więc użyć odpowiednio pipi pip3.
Alistair Martin
8
Zwróciłem tylko uwagę, że w końcu będziesz musiał zmienić nazwy wszystkich tych narzędzi. Nawet wtedy istnieje ryzyko, że coś się zepsuje, jeśli na przykład python3 jawnie (np. Zakodowane na stałe) wywoła pip, a nie pip3.
Christian
To zły pomysł, w końcu zmieniłoby nazwę wszystkiego, a pip nie działa w ten sposób.
bhansa
aby przestać uruchamiać problem z pipem w python3. potrzebujesz UNSLECT "install pip" z początkowego kreatora instalacji python3, następnie zmień nazwę python3.7 / python.exe na python3.exe, NASTĘPNIE pobierz get-pip.py i uruchom python3.exe get-pip.py. Więc pip3 wie, że zmieniona nazwa python3.exe jest dla python3, a nie oryginalnym /python3.7/python.exe
Junchen Liu
36

Możesz mieć oba zainstalowane.

Powinieneś napisać to przed swoim skryptem:

#!/bin/env python2.7

lub w końcu ...

#!/bin/env python3.6

Aktualizacja

Moje rozwiązanie działa doskonale z Uniksem, po szybkim wyszukiwaniu w Google , oto rozwiązanie Windows:

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

To samo: przed twoim skryptem.

Patrick Desjardins
źródło
Cóż, można go zainstalować w systemie Linux i może być również w systemie Windows. Wystarczy ustawić zmienną env ... możesz to zrobić w systemie Windows ...
Patrick Desjardins,
7
To rozwiązanie nie będzie działać z oknami (chyba że wywołasz je z powłoki w stylu uniksowym (np. Cygwin)). #! jest obsługiwany przez powłokę, a system Windows jej nie obsługuje. Wierzę, że w przykładzie, który wpisałeś w Google, jest obsługiwany przez serwer internetowy, a nie uruchamiany w systemie Windows
Brian,
Tak, na Apache w systemie Windows ... automatycznie pojawia się żądanie pytania, możesz to zrobić za pomocą Cygwin, Apache, itp ...
Patrick Desjardins,
@Daok: Nie przegłosowałem cię. Jestem wdzięczny za pomoc, nawet próbę pomocy.
miętowy
4
Można użyć pylaunchera, aby coś takiego działało (jak opisano w PEP 397 - Python launcher dla Windows w 2011.
martineau
33

Od wersji 3.3 Python wprowadził narzędzie Launcher for Windows https://docs.python.org/3/using/windows.html#python-launcher-for-windows .

Aby móc korzystać z wielu wersji Pythona:

  1. zainstaluj Python 2.x (x to dowolna wersja, której potrzebujesz)
  2. zainstaluj Python 3.x (x to dowolna wersja, której potrzebujesz, musisz mieć jedną wersję 3.x> = 3.3)
  3. otwórz wiersz polecenia
  4. wpisz py -2.x, aby uruchomić Python 2.x
  5. wpisz py -3.x, aby uruchomić Python 3.x
Ivan Kucerak
źródło
1
A co z ludźmi, którzy używają IDE? Czy to też działa na to?
emorphus
1
@emorphus chyba zależy od IDE, ale generalnie powinieneś być w stanie wybrać wersję interpretera. Więc jeśli masz zainstalowanych wiele wersji Pythona, po prostu wybierz tę, której chcesz użyć w swoim projekcie. Również terminal w IDE działa tak samo jak wiersz poleceń, więc te polecenia również powinny działać.
Ivan Kucerak
2
To najlepsze rozwiązanie IMO, działa idealnie od samego początku. Nie musisz mieć -3.x, możesz po prostu zrobić py -3 filename.py.
OmegaNalphA
9

Używam 2.5, 2.6 i 3.0 z powłoki z jednowierszowymi skryptami wsadowymi w postaci:

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

Nazwij je pythonX.Y.bati umieść gdzieś w swojej ŚCIEŻCE. Skopiuj plik preferowanej wersji pomocniczej (tj. Najnowszej) do pythonX.bat. (Np copy python2.6.bat python2.bat.) Wtedy możesz używać python2 file.pyz dowolnego miejsca.

Jednak to nie pomaga, a nawet nie wpływa na sytuację skojarzeń plików w systemie Windows. W tym celu potrzebujesz programu uruchamiającego, który odczytuje #!linię, a następnie kojarzy ją z plikami .py i .pyw.

Społeczność
źródło
Zobacz mój komentarz na temat odpowiedzi Patricka Desjardinsa.
martineau
8

Po dodaniu zarówno do zmiennych środowiskowych nie będzie a będzie konflikt, ponieważ dwa wykonywalne mają taką samą nazwę: python.exe.

Po prostu zmień nazwę jednego z nich. W moim przypadku zmieniłem nazwę na python3.exe.

Więc kiedy uruchomię python, wykona, python.execo wynosi 2,7, a kiedy uruchomię python3, wykona, python3.execo wynosi 3,6

wprowadź opis obrazu tutaj

Charif DZ
źródło
Czy możesz rozwinąć część dotyczącą notatki? Kiedy zmieniam nazwę pythona na python3, nie mogę już uruchamiać pip, ponieważ wydaje się, że pip.exe, pip3.exe i pip3.7.exe zależą od python.exe. Kiedy uruchamiam pip, otrzymuję błąd => 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
Nie wiem, że nie miałem tego problemu
Charif DZ
@MandarSadye Możesz otworzyć pip.exe w notatniku i wyszukać python.exe .. Następnie zamień python.exe na python3.exe
atg
7

Proszę bardzo...

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)

Właśnie podniosłem to po przeczytaniu tego wątku (ponieważ tego też potrzebowałem). Mam Pythona 2.6.1 i 3.0.1 zarówno na Ubuntu, jak i Windows. Jeśli to nie zadziała, opublikuj poprawki tutaj.


źródło
1
Byłoby lepiej użyć sys.exit(process.returncode)do propagowania statusu wyjścia wywoływanego skryptu do wywołującego.
martineau
4

O ile wiem, Python uruchamia się z wiersza poleceń przy użyciu zmiennej PATH w przeciwieństwie do ustawienia rejestru.

Więc jeśli wskażesz poprawną wersję na swojej PATH, użyjesz tego. Pamiętaj, aby ponownie uruchomić wiersz polecenia, aby użyć nowych ustawień PATH.

James McMahon
źródło
To prawda, jeśli wpiszesz `` python myscript.py '', możesz zamiast tego wpisać C: \ python30 \ python.exe, ale wiersz polecenia zrobi to automatycznie, jeśli wpiszesz tylko myscript.py, a nie chcę przerywać 2. ? skrypty, jeśli zainstaluję 3.0 na tym samym komputerze.
miętowy
No i miętowo, może pomóc dodanie informacji w pierwszym komentarzu do pytania, było trochę mgliste.
James McMahon,
3

Instalacja Pythona zazwyczaj kojarzy .py, .pywa .pycpliki z interpretera Pythona. Możesz więc uruchomić skrypt Pythona, klikając go dwukrotnie w Eksploratorze lub wpisując jego nazwę w oknie wiersza poleceń (więc nie musisz pisać python scriptname.py, po prostu scriptname.pyzrobi).

Jeśli chcesz ręcznie zmienić to skojarzenie, możesz edytować te klucze w rejestrze systemu 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

Ludzie pracowali nad programem uruchamiającym Python dla systemu Windows: lekkim programem skojarzonym z plikami .pyi .pyw, które szukałyby linii „shebang” (podobnie jak w Linuksie i in.) W pierwszym wierszu i uruchamiały Python 2.x lub 3.x jako wymagany. Szczegółowe informacje można znaleźć w poście na blogu „A Python Launcher for Windows” .

Craig McQueen
źródło
3

Spróbuj użyć Anacondy.

Korzystając z koncepcji środowisk Anaconda, powiedzmy, że potrzebujesz Pythona 3 do nauki programowania, ale nie chcesz wymazać środowiska Python 2.7 poprzez aktualizację Pythona. Możesz utworzyć i aktywować nowe środowisko o nazwie „węże” (lub cokolwiek chcesz) i zainstalować najnowszą wersję Pythona 3 w następujący sposób:

conda create --name snakes python=3

To prostsze niż się wydaje, spójrz na stronę wprowadzającą tutaj: Pierwsze kroki z Anacondą

A następnie, aby poradzić sobie z konkretnym problemem związanym z uruchomieniem wersji 2.x i 3.x obok siebie, zobacz: Zarządzanie wersjami Pythona za pomocą Anacondy

Cale Sweeney
źródło
Link intro Anaconda jest uszkodzony.
Alex
1
Naprawiono link do „Pierwsze kroki z Anacondą”.
Cale Sweeney,
2
@JeffreyCordero Poprawiłem link. Dokumenty Anacondy mogą działać, ale nie mogą się ukryć.
Cale Sweeney
2

Oto jak uruchomić Python 2 i 3 na tym samym komputerze

  1. zainstaluj Python 2.x
  2. zainstaluj Python 3.x
  3. Uruchom Powershell
  4. Wpisz Python -2, aby uruchomić Python 2.x
  5. Wpisz Python -3, aby uruchomić Python 2.x

Python Launcher dla Windows został osadzony w Pythonie od wersji 3.3, jak obiecał w 2011 roku, kiedy sam Stand pierwszy zadebiutowała:

Python Launcher dla Windows

rogerwamba
źródło
A co z ludźmi, którzy używają IDE? Czy to też działa na to?
emorphus
2

Oto schludny i przejrzysty sposób instalacji Python2 i Python3 w systemie Windows.

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

Mój przypadek: musiałem zainstalować cassandra Apache. Miałem już Python3 zainstalowany w moim D: dysk . Z mnóstwem prac programistycznych w trakcie, nie chciałem zepsuć mojej instalacji Python3. Potrzebowałem Pythona2 tylko dla Apache cassandra.

Więc podjąłem następujące kroki:

  1. Pobrany i zainstalowany Python2.
  2. Dodano wpisy Python2 do classpath ( C:\Python27;C:\Python27\Scripts)
  3. Zmodyfikowany python.exe do python2.exe (jak przedstawiono na rysunku poniżej)

wprowadź opis obrazu tutaj

  1. Teraz mogę uruchomić oba. Dla Python 2 ( python2 --version) i Python 3 ( python --version). wprowadź opis obrazu tutaj

Tak więc moja instalacja Python3 pozostała nienaruszona.

Alex
źródło
1

Myślę, że w instalatorze istnieje opcja skonfigurowania skojarzenia plików systemu Windows dla plików .py. Odznacz to i powinno być dobrze.

Jeśli nie, możesz łatwo ponownie powiązać pliki .py z poprzednią wersją. Najprostszym sposobem jest kliknięcie prawym przyciskiem myszy na pliku .py i wybranie opcji „otwórz za pomocą” / „wybierz program”. W wyświetlonym oknie dialogowym wybierz lub przejdź do wersji języka Python, której chcesz używać domyślnie, i zaznacz pole wyboru „Zawsze używaj tego programu do otwierania tego rodzaju plików”.

Brian
źródło
To właśnie zrobiłem. Nadal mam 2.5.2 i 3.0.1 na moim pudełku z Windows Vista. Odznacziłem to w kreatorze instalacji (mogłem powiedzieć coś w stylu „Zarejestruj się w systemie” - zapomniałem). Obie działają dobrze. W przypadku wiersza poleceń umieszczam w ścieżce plik py.bat, który uruchamia Pythona 3 - nic nadzwyczajnego, ale robi to, czego potrzebuję.
Anon,
1

Powinieneś upewnić się, że zmienna środowiskowa PATH nie zawiera obu plików python.exe (dodaj ten, z którego obecnie korzystasz do codziennego uruchamiania skryptów), ani postępuj zgodnie z sugestią Kniht z plikami wsadowymi. Poza tym nie rozumiem, dlaczego nie.

PS: Mam zainstalowany 2.6 jako mój „podstawowy” Python i 3.0 jako mój „Play” Python. 2.6 jest zawarty w PATH . Wszystko dziala .

Geo
źródło
1

Zanim odważnie zainstalowałem oba jednocześnie, miałem tyle pytań. Jeśli podam Pythona, czy przejdzie do py3, gdy chcę py2? pip / virtualenv będzie się działo pod py2 / 3?

Teraz wydaje się to bardzo proste.

Po prostu ślepo zainstaluj oba z nich. Upewnij się, że masz odpowiedni typ (x64 / x32). Podczas / po instalacji upewnij się, że dodajesz do ścieżki do zmiennych środowiskowych .

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

Zastąp x w powyższym poleceniu, aby ustawić ścieżkę.

Następnie przejdź do obu folderów.

Nawigować do

python3.6/Scripts/

i zmień nazwę pip na pip3.

Jeśli pip3 już istnieje, usuń plik pip. Zapewni to, że po prostu pip będzie działał pod python2 . Możesz zweryfikować:

pip --version

Jeśli chcesz używać pip z python3, po prostu użyj

pip3 install 

Możesz podobnie zrobić to samo z plikiem Pythona i innymi.

Twoje zdrowie!

Shreyaa Sridhar
źródło
1

Łatwo, po zainstalowaniu obu wersji Pythona dodaj ścieżki do zmiennych środowiskowych; patrz ustawienia zmiennych środowiskowych. Następnie przejdź do folderów python 2 i python 3 i zmień ich nazwy odpowiednio na python2 i python3, jak pokazano tutaj dla python2i tutaj dla python3. Teraz w cmd wpisz python2 lub python3, aby użyć wymaganej wersji, patrz tutaj.

nilakantha singh deo
źródło
0

Tak przypuszczam, mam Pythona 2.4, 2.5 i 2.6 zainstalowane obok siebie na tym samym komputerze.


źródło
To moja praca dla wielu wersji 2.x, ale minty pyta, czy mogą uruchomić 2.x razem z 3.x. Istnieje kilka znaczących różnic między nimi. Zobacz: Różnice między 2.x a 3.x
Cale Sweeney
0

Właśnie zaczynam od Pythona. Czytam książkę Zeda Shawa „Learn Python the Hard Way”, która wymaga języka Python w wersji 2.x, ale biorę też udział w zajęciach, które wymagają języka Python 3.x

Więc oto co zrobiłem.

  1. Pobierz Pythona 2.7
  2. uruchom powłokę zasilania (powinna być już zainstalowana w systemie Windows)
  3. uruchom Pythona W POWERSHELL (jeśli nie rozpoznaje, przejdź do kroku 4)
  4. Tylko jeśli program PowerShell nie rozpoznaje typu Python 2.7 w następujący sposób:

„[ŚRODOWISKO] :: SETENVIRONMENTVARIABLE („ PATH ”,„ $ ENV: PATH; C: \ PYTHON27 ”,„ USER ”)” (bez zewnętrznych cudzysłowów)

  1. Teraz wpisz python i powinieneś zobaczyć, że mówi python 2.7 bla bla bla

TERAZ dla Pythona 3.x

Proste pobieranie pythona 3.x jest dostarczane z aplikacją Python dla systemu Windows. Więc po prostu przypnij aplikację Python for Windows do paska zadań lub utwórz skrót do pulpitu i gotowe!

Otwórz Python dla Windows dla 3.x

Otwórz program Powershell dla języka Python 2.x

Mam nadzieję, że to pomoże!

Davidopopoplis
źródło
0

Hmm… Zrobiłem to teraz, pobierając Python 3.6.5 dla Windows ze strony https://www.python.org/downloads/release/python-365/ i upewniając się, że program uruchamiający zostanie zainstalowany. Następnie postępowałem zgodnie z instrukcjami dotyczącymi używania Pythona 2 i Pythona 3. Uruchom ponownie wiersz poleceń, a następnie użyj, py -2.7aby użyć Pythona 2 i pylub, py -3.6aby użyć Pythona 3. Można również użyć pip2dla Pythona 2 pipi pipPythona 3 pip.

FearlessFuture
źródło
0

Miałem ten sam problem, w którym chciałem używać python3 do większości prac, ale IDA pro wymagało python2. WIĘC, oto co zrobiłem.

Najpierw utworzyłem 3 zmienne w zmiennej środowiskowej użytkownika w następujący sposób:

  1. PYTHON_ACTIVE: początkowo jest pusty
  2. HOME_PYTHON27: Ma ścieżkę do folderu, w którym jest zainstalowany Python 2. Na przykład. "; / scripts;"
  3. HOME_PYTHON38: Podobnie jak w Pythonie 2, ta zmienna zawiera ścieżkę do folderów w Pythonie 3.

Teraz dodałem

% PYTHON_ACTIVE%

do zmiennej PATH. Więc mówiąc w zasadzie, że cokolwiek zawiera ten "PYTHON_ACTIVE" jest aktywnym Pythonem. Programowo zmieniamy zawartość „PYTHON_ACTIVE”, aby zmienić wersję Pythona.

Oto przykładowy skrypt:

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

Ten skrypt przyjmuje wersję Pythona jako dane wejściowe i odpowiednio kopiuje HOME_PYTHON27 lub HOME_PYTHON38 do PYTHON_ACTIVE. Zmieniając w ten sposób globalną wersję Pythona.

Mandar Sadye
źródło