Jak zainstalować zarówno Python 2.x jak i Python 3.x w systemie Windows

230

Większość programowania zajmuję się w Pythonie 3.x na Windows 7, ale teraz muszę korzystać z Python Imaging Library (PIL), ImageMagick i wxPython, z których wszystkie wymagają Python 2.x.

Czy mogę mieć zarówno Python 2.x jak i Python 3.x zainstalowane w systemie Windows 7? Kiedy uruchamiam skrypt, jak mam „wybrać”, która wersja Pythona powinna go uruchomić? Czy wspomniane programy będą w stanie obsłużyć wiele wersji Pythona zainstalowanych jednocześnie? Szukałem godzinami, jak to zrobić bezskutecznie.

Dzięki.

dln385
źródło
2
Tak, jak mówi @NickT, jest to najłatwiejsze. Niestety, żadna z poniższych odpowiedzi nie podaje prostego, bezpośredniego podejścia. (Te, które wspominają o wersji 3.3, są najbliższe.) Aby uzyskać lepszą odpowiedź, zobacz odpowiedź pod duplikatem pytania: stackoverflow.com/a/17245543/1593924 Krótko mówiąc, użyj nowego programu uruchamiającego „py”, z lub bez -3 parametr. Zastanów się nad dodaniem shebangs (#!) Do swoich skryptów, aby nie potrzebujesz parametru.
Jon Coombs
1
Ponadto niektórzy uznali dane, które tu zamieściłem, za pomocne: stackoverflow.com/a/13533958/1593924
Jon Coombs

Odpowiedzi:

150

Stwierdziłem, że formalny sposób na zrobienie tego jest następujący:

Wystarczy zainstalować dwie (lub więcej, używając ich instalatorów) wersje Pythona na Windows 7 (dla mnie praca z 3.3 i 2.7).

Postępuj zgodnie z instrukcjami poniżej, zmieniając parametry dla swoich potrzeb.

Utwórz następującą zmienną środowiskową (domyślnie po podwójnym kliknięciu):

Name:  PY_PYTHON
Value: 3

Aby uruchomić skrypt w konkretnym tłumaczu, dodaj następujący shebang (początek skryptu):

#! python2

Aby wykonać skrypt za pomocą określonego interpretera, użyj następującego polecenia zachęty:

> py -2 MyScript.py

Aby uruchomić określonego tłumacza:

> py -2

Aby uruchomić domyślny interpreter (zdefiniowany przez zmienną PY_PYTHON):

> py

Zasoby

Dokumentacja: Używanie Pythona w systemie Windows

PEP 397 - Program uruchamiający Python dla systemu Windows

Pedro Vagner
źródło
8
Ponadto, aby użyć easy_install lub pip z obiema wersjami, zmień ścieżkę na Uwzględnij c:\python35;c:\python35\scripts;c:\python27\scripts;. Pozwala to na użycie pip2/ pip3, i easy_install-2.7/ easy_install-3.5zamiast pipi easy_install.
rdtsc
1
Nie będzie działać z różnymi programami, które nie dostarczają własnego Pythona i nalegają na użycie wersji systemowej i nie szanują programu uruchamiającego.
Jonathan Baldwin
1
Nie, nie dodawaj do ścieżki żadnego Pythona. Zastosowanie py -m pip install .... Dodaj przełączniki po, pyaby wybrać, pod którym Pythonem uruchomić pip, jak wyżej.
Mark Tolonen,
75

To, co zrobiłem, to pobranie zarówno wersji 2.7.6, jak i 3.3.4. Python 3.3.4 ma opcję dodania do niego ścieżki w zmiennej środowiskowej, aby to zrobić. Zasadniczo właśnie dodałem ręcznie Python 2.7.6.

Jak...

  1. Start> w typie wyszukiwania w środowisku wybierz „Edytuj zmienne środowiskowe na swoim koncie” 1

  2. Przewiń w dół do Ścieżka, wybierz ścieżkę, kliknij edytuj.

  3. Dodaj C: \ Python27; więc powinieneś mieć tam ścieżki do obu wersji Pythona, ale jeśli tego nie zrobisz, możesz go łatwo edytować, aby zrobić ..... C: \ Python27; C: \ Python33;

  4. Przejdź do folderu Python27 w C: \ i zmień nazwę kopii python.exe na python2.exe

  5. Przejdź do folderu Python34 w C: \ i zmień nazwę kopii python.exe na python3.exe

  6. Test: otwórz wiersz polecenia i wpisz python2 .... BOOM! Python 2.7.6. wyjdź.

  7. Test: otwórz wiersz polecenia i wpisz python3 .... BOOM! Python 3.4.3. wyjdź.

Uwaga: (aby nie złamać komend pip w kroku 4 i 5, zachowaj kopię pliku python.exe w tym samym katalogu, co plik o zmienionej nazwie)

użytkownik3458330
źródło
43
Spowoduje to uszkodzenie zarówno pip2, jak i pip3! Nie zastępuj Pythona, skopiuj go i zmień nazwę drugiego pliku na python2 / python3.
brunofitas
1
tylko ostrzeżenie, nie mogłem odinstalować Pythona, dopóki nie przywróciłem nazw. Radzę robić kopie i zmieniać ich nazwy, ale pozostawić oryginalne pliki python.exe w spokoju **, o czym wspomniał także Bruno.
Logika 1
2
Czy potrafisz przetworzyć odpowiedź brunofitas w odpowiedzi?
030
Tak, właśnie zmieniłem nazwę python.exe w instalacji Python3 na python3.exe. Myślę, że dzieje się tak automatycznie w przypadku Pythona w środowisku * nix. Oczywiście nie ma plików .exe, ale istnieje program python2 i python3. :)
user3870315 21.02.19
Jeśli masz bibliotekę / wtyczkę, która zależy od którejkolwiek wersji Pythona, upewnij się, że ta wersja jest pierwsza w zmiennej środowiskowej PATH
aphoe
51

Mam wiele wersji w systemie Windows. Zmieniam tylko nazwę exe wersji, której domyślnie nie używam.

python.exe -> python26.exe

pythonw.exe -> pythonw26.exe

Jeśli chodzi o instalatory pakietów, większość programów exe pozwala wybrać instalację Pythona, aby dodać również pakiet. W przypadku instalacji ręcznej sprawdź opcję --prefix, aby określić, gdzie pakiet powinien zostać zainstalowany:

http://docs.python.org/install/index.html#alternate-installation-windows-the-prefix-scheme

monkut
źródło
To zadziałało. Przed wprowadzeniem tej zmiany, kiedy próbowałem uruchomić program w Pythonie 2.7, nadal działał w Pythonie 3.1 (być może dlatego, że Windows 7 nie obsługuje dwóch różnych programów o tej samej nazwie). Po zmianie nazwy exe, jak pokazano, wszystko poszło dobrze.
dln385
4
@ dln385: Jeśli odpowiedział na twoje pytanie, powinieneś je zaakceptować, klikając znacznik wyboru.
dappawit
1
To również działało dla mnie. Miałem konflikt między Python 2.7 a Python 3.2. Ponieważ najpierw zainstalowałem Python 3.2 (i odpowiednio ustawiłem jako zmienną środowiskową), nie mogłem uzyskać dostępu do Python 2.7 w wierszu polecenia (zamiast tego dostałem Python 3.2). Chciałem użyć jako domyślnego Python 2.7, dlatego zmieniłem python.exe na python3.2.exe i utrzymałem python.exe w Python 2.7 bez zmian. To załatwiło sprawę.
Robert Smith
Od jakiegoś czasu nie instalowałem nowego Pythona w systemie Windows, ale wersja, którą mam, zawiera pip jako pip3i pip3.4. (obejmuje to również jako pip, ale myślę, że usunięcie powinno rozwiązać wszelkie konflikty z python2). Właściwie nie mam C:\Python34\Scriptsw sobie Path, więc nie miałem żadnych problemów związanych z pipem ...
monkut
30

Jeśli używasz Anaconda Python, możesz łatwo zainstalować różne środowiska.

Załóżmy, że zainstalowałeś Anaconda Python 2.7 i chciałeś mieć środowisko Python 3.4:

conda create -n py34 python=3.4 anaconda

Następnie, aby aktywować środowisko:

activate py34

I dezaktywować:

deactivate py34

(W systemie Linux powinieneś użyć source activate py34.)

Spinki do mankietów:

Pobierz Anaconda Python

Instrukcje dla środowisk

philshem
źródło
IMO conda jest zdecydowanie najlepszym sposobem na bałagan z różnymi instalacjami Pythona. Zepsułem tyle rzeczy, zanim przeprowadziłem się do Anakondy.
jrinker
11

Aby zainstalować i uruchomić dowolną wersję Pythona w tym samym systemie, postępuj zgodnie z moim przewodnikiem poniżej.


Na przykład powiedz, że chcesz zainstalować Python 2.x i Python 3.x w tym samym systemie Windows.

  1. Zainstaluj obie wersje binarne w dowolnym miejscu.

    • Po wyświetleniu monitu nie rejestruj ich rozszerzeń plików i
    • nie dodawaj ich automatycznie do zmiennej środowiskowej PATH
  2. Uruchamiając po prostu komendę, pythonplik wykonywalny, który jest po raz pierwszy spełniony w PATH, zostanie wybrany do uruchomienia. Innymi słowy, dodaj katalogi Python ręcznie. Ten, który dodasz jako pierwszy, zostanie wybrany podczas pisania python. Kolejne programy w języku Python (rosnąca kolejność umieszczania ich katalogów w ŚCIEŻCE) zostaną wybrane w następujący sposób:

    • py -2 dla drugiego python
    • py -3 dla trzeciego pythonitd.
  3. Bez względu na kolejność „pytonów” możesz:

    • uruchom skrypty Python 2.x za pomocą polecenia: py -2 (funkcjonalność Python 3.x) (tzn. zostanie wybrany pierwszy program instalacyjny Python 2.x znaleziony w twojej ŚCIEŻCE)
    • uruchom skrypty Python 3.x za pomocą polecenia: lub py -3 (tzn. zostanie wybrany pierwszy program instalacyjny Python 3.x znaleziony w twojej ŚCIEŻCE)

W moim przykładzie najpierw zainstalowałem Python 2.7.14 i Python 3.5.3. Oto jak moja zmienna PATH zaczyna się od:

ŚCIEŻKA = C: \ Program Files \ Microsoft MPI \ Bin \; C: \ Python27; C: \ Program Files \ Python_3.6 \ Scripts \; C: \ Program Files \ Python_3.6 \; C: \ ProgramData \ Oracle \ Java \ javapath; C: \ Program Files (x86) \ Common Files \ Intel \ Shared

...

Zauważ, że Python 2.7 jest pierwszy, a Python 3.5 drugi.

  • Tak więc uruchomiona pythonkomenda uruchomi Python 2.7 (jeśli Python 3.5 to samo polecenie uruchomi Python 3.5).
  • Uruchamianie py -2uruchamia Python 2.7 (ponieważ zdarza się, że drugim Pythonem jest Python 3.5, który jest niezgodny py -2). Uruchamianie py -3uruchamia Python 3.5 (ponieważ jest to Python 3.x)
  • Jeśli miał inny pyton później w drogę by uruchomić tak: py -4. Może się to zmienić, jeśli / kiedy zostanie wydana wersja 4 języka Python.

Teraz py -4lub py -5itd. Na wyjściach mojego systemu: Requested Python version (4) not installedlub Requested Python version (5) not installeditp.

Mam nadzieję, że jest to wystarczająco jasne.

Nikos
źródło
Jak określić instalację pip w jednej z dystrybucji w Pythonie?
Víctor Martínez
Dla pierwszego znalezionego pytona wpisz po prostu pip. Dla każdego innego zainstalowanego pytona musisz ręcznie określić ścieżkę, tj. C:\Python27\Scripts\pip.py [parameters]. (Oczywiście, jako skrót, możesz umieścić dowolnego pliku exe w zmiennej środowiskowej.)
Nikos
@ Nik-Lz, do czego odnosi się polecenie „py -2”? Wydaje mi się, że nie mam ich w systemie Windows 7.
Janos
2
Dokładnie tak powinno się używać Pythona w systemie Windows w przypadku wielu wersji.
getName
8

Począwszy od wersji 3.3 Wersja systemu Windows ma program uruchamiający w języku Python, zobacz sekcję 3.4. Python Launcher dla Windows

Dmitrij Sobolev
źródło
8

Oto, co możesz zrobić:

Zainstaluj cmder . Otwórz i używaj Cmdera tak, jak przy terminalu cmd. Użyj aliasu poleceń, aby utworzyć aliasy poleceń.

Zrobiłem następujące:

alias python2 = c:\python27\python.exe
alias python3 = c:\python34\python.exe

I to wszystko! ;-)

użytkownik402429
źródło
6
set-alias python2 c:\python27\python.exe
Prorok Daniel
Użyj zestawu aliasu jako przykładowego pokazu, jeśli używasz PowerShell. W takim przypadku nie byłoby potrzeby instalowania Cmdera.
Prorok Daniel
@ProphetDaniel To powinno być opublikowane jako osobna odpowiedź. Całkowicie odpowiada na pierwotne pytanie.
Dr_Zaszuś
7

Właśnie pomyślałem o ciekawym rozwiązaniu. Chociaż system Windows nie pozwala na łatwe aliasowanie programów, możesz zamiast tego utworzyć pliki wsadowe o zmienionej nazwie, które wywołają bieżący program.

Zamiast zmieniać nazwę pliku wykonywalnego, który zepsuje wiele rzeczy, w tym pip, utwórz plik python2.bat w tym samym katalogu, co python2.exe. Następnie dodaj następujący wiersz:

%~dp0python %*

Co oznacza ta archaiczna składnia? Cóż, jest to skrypt wsadowy (wersja bash dla Windows). % ~ dp0 pobiera bieżący katalog, a% * po prostu przekazuje wszystkie argumenty do Pythona, które zostały przekazane do skryptu.

Powtórz dla python3.bat

Możesz również zrobić to samo dla pip i innych narzędzi, po prostu zamień słowo python w pliku na pip lub dowolną inną nazwę pliku. Alias ​​będzie taki, jak nazwa pliku.

Co najlepsze, po dodaniu do ŚCIEŻKI system Windows ignoruje tak działające rozszerzenie

python3

Uruchomi wersję python3, a polecenie python2 uruchomi wersję python2.

BTW, jest to ta sama technika, której używa Spyder, aby dodać się do ścieżki w systemie Windows. :)

Skylion
źródło
1
Niesamowite rozwiązanie bez modyfikowania istniejących plików Pythona.
Om Prakash
3

Możesz zainstalować wiele wersji Pythona na jednym komputerze, a podczas instalacji możesz wybrać, aby jedna z nich skojarzyła się z rozszerzeniami plików Python. Jeśli zainstalujesz moduły, będą różne pakiety instalacyjne dla różnych wersji lub możesz wybrać wersję, na którą chcesz kierować. Ponieważ zazwyczaj instalują się w katalogu site-packages wersji interpretera, nie powinno być żadnych konfliktów (ale tego nie testowałem). Aby wybrać wersję Pythona, musisz ręcznie określić ścieżkę do interpretera, jeśli nie jest ona domyślna. O ile wiem, dzielą te same zmienne PATH i PYTHONPATH, co może stanowić problem.

Uwaga: korzystam z systemu Windows XP. Nie mam pojęcia, czy którakolwiek z tych zmian ulegnie zmianie w innych wersjach, ale nie widzę żadnego powodu, aby tak się stało.

li.davidm
źródło
3
Mam zainstalowane jednocześnie Python 2.5, 2.6 i 3.1. Nigdy nawet nie przyszło mi do głowy, że mogę zrobić coś trudniejszego niż po prostu uruchomić wszystkie instalatory dla każdej wersji, której potrzebuję.
SingleNegationElimination
3

To, co zrobiłem na własnym komputerze z systemem Windows, na którym mam zainstalowany Python 2.7 i Python 3.4, to napisanie prostego pliku .bat w tym samym katalogu, co moje pliki Python.exe. Wyglądają jak

cmd /k "c:\python27\python.exe" %*

% * Pozwala później dodawać argumenty (pliki Python). Wierzę, że / k utrzymuje monit otwarty po zakończeniu działania skryptu. Następnie zapisuję to jako python27.bat Następnie przechodzę do mojego katalogu Python 3 i tworzę tam plik bat. Teraz w wierszu poleceń mogę pisać

Python27 helloworld.py

Lub

Python34 helloworld.py

I będą działać w odpowiednich wersjach Pythona. Upewnij się, że c: \ python27 i c: \ python34 znajdują się w zmiennych środowiskowych.

Mam stąd odpowiedź

Bryan Kimani
źródło
2

Zrobiłem to w trzech krokach, postępując zgodnie z instrukcjami tutaj: Wszystko to jest pobierane bezpośrednio stąd: http://ipython.readthedocs.io/en/stable/install/kernel_install.html . Obecnie używam Python 2.x na Windows 8 i mam zainstalowaną Anacondę 4.2.13.

1) Najpierw zainstaluj najnowszą wersję Pythona:

conda create -n python3 python=3 ipykernel

2) Następnie aktywuj python3

activate python3

3) Zainstaluj jądro:

python -m ipykernel install --user

Jeśli masz zainstalowany Python 3 i chcesz zainstalować 2, zmień 2 i 3 powyżej. Po otwarciu nowego notesu możesz teraz wybierać między Pythonem 2 a 3.

Moiz Kapadia
źródło
1

Sprawdź swoje systemowe zmienne środowiskowe po zainstalowaniu Pythona, katalogi Pythona 3 powinny znajdować się najpierw w zmiennej PATH, a następnie python 2.

Która zmienna ścieżki pasuje do pierwszej, to ta, której używa Windows.

Jak zawsze py -2 uruchomi python2 w tym scenariuszu.

Spitfire19
źródło
1

Sam zetknąłem się z tym problemem i zrobiłem moje programy uruchamiające w .bat, abyś mógł wybrać wersję, którą chcesz uruchomić.

Jedynym problemem jest to, że plik .py musi znajdować się w folderze python, ale w każdym razie tutaj jest kod:

Dla Python2

@echo off
title Python2 Launcher by KinDa
cls
echo Type the exact version of Python you use (eg. 23, 24, 25, 26)
set/p version=
cls
echo Type the file you want to launch without .py (eg. hello world, calculator)
set/p launch=
path = %PATH%;C:\Python%version%
cd C:\Python%version%
python %launch%.py
pause

Dla Python3

@echo off
title Python3 Launcher by KinDa
cls
echo Type the exact version of Python you use (eg. 31, 32, 33, 34)
set/p version=
cls
echo Type the file you want to launch without .py (eg. hello world, calculator)
set/p launch=
cls
set path = %PATH%:C:\Python%version%
cd C:\Python%version%
python %launch%.py
pause

Zapisz je jako .bat i postępuj zgodnie z instrukcjami w środku.

KinDa
źródło
0

Zainstaluj ten, którego używasz najczęściej (w moim przypadku 3.3) nad drugim. Zmusi to IDLE do użycia tego, którego chcesz.

Alternatywnie (z README python3.3):

Instalowanie wielu wersji

W systemach Unix i Mac, jeśli zamierzasz zainstalować wiele wersji Pythona przy użyciu tego samego prefiksu instalacyjnego (argument --prefix w skrypcie konfiguracyjnym), musisz uważać, aby instalacja podstawowego pliku Python nie została nadpisana przez instalację innej wersji. Wszystkie pliki i katalogi instalowane przy użyciu polecenia „make altinstall” zawierają wersję główną i pomocniczą, dzięki czemu mogą żyć obok siebie. „make install” tworzy również $ {prefix} / bin / python3, który odnosi się do $ {prefix} /bin/pythonX.Y. Jeśli zamierzasz zainstalować wiele wersji przy użyciu tego samego prefiksu, musisz zdecydować, która wersja (jeśli istnieje) jest wersją „podstawową”. Zainstaluj tę wersję za pomocą polecenia „make install”. Zainstaluj wszystkie pozostałe wersje za pomocą polecenia „make altinstall”.

Na przykład, jeśli chcesz zainstalować Python 2.6, 2.7 i 3.3 z wersją podstawową 2.7, wykonaj „make install” w katalogu kompilacji 2.7 i „make altinstall” w pozostałych.

abudhabikid
źródło
0

Po prostu musiałem je zainstalować. Następnie skorzystałem z darmowego (i przenośnego) oprogramowania pod adresem http://defaultprogramseditor.com/ pod „Ustawienia typu pliku” / „Menu kontekstowe” / szukaj: „py”, wybrałem plik .py i dodałem polecenie „otwórz” dla 2 IDLE, kopiując istniejące polecenie o nazwie „otwórz z IDLE”, zmieniając nazwy na IDLE 3.4.1 / 2.7.8 i zastępując numery plików odpowiednich wersji w ścieżce programu. Teraz muszę tylko kliknąć plik .py prawym przyciskiem myszy i wybrać, którego IDLE chcę użyć. Możesz zrobić to samo z bezpośrednimi tłumaczami, jeśli wolisz.

wheya
źródło
-1

Działa tylko, jeśli uruchamiasz swój kod w środowisku IDE Pythona

Mam zarówno Python 2.7, jak i Python 3.3 zainstalowany w moim systemie operacyjnym Windows. Jeśli spróbuję uruchomić plik, zwykle otworzy się on w środowisku IDE python 2.7. Jak rozwiązałem ten problem, kiedy zdecydowałem się uruchomić mój kod w Pythonie 3.3, otwieram Python 3.3 IDLE (GUI Pythona), wybieram plik, otwieram mój plik z IDLE i zapisuję go. Następnie, kiedy uruchamiam mój kod, przechodzi do IDLE, w którym go aktualnie otworzyłem. Działa odwrotnie z wersją 2.7.

użytkownik3295433
źródło
-1

Zainstalowałem zarówno python 2.7.13, jak i python 3.6.1 na Windows 10pro i otrzymywałem ten sam „błąd krytyczny”, kiedy próbowałem pip2 lub pip3.

To, co zrobiłem, aby to naprawić, to przejść do lokalizacji python.exe dla plików python 2 i python 3 i utworzyć kopię każdego z nich, a następnie zmieniłem nazwę każdej kopii na python2.exe i python3.exe w zależności od wersji python w pliku folder instalacyjny. Dlatego miałem w każdym folderze instalacyjnym Pythona zarówno plik python.exe, jak i python2.exe lub python3.exe, w zależności od wersji python.

To rozwiązało mój problem, gdy wpisałem pip2 lub pip3.

eddy onyango
źródło
-2

Jeśli nie możesz uzyskać niczego innego do pracy, otwórz tłumacza w dowolnej wybranej wersji (wolę używanie iPython) i:

import subprocess

subprocess.call('python script.py -flags')

Używa dowolnej wersji języka Python, w której aktualnie pracujesz. Działa dobrze dla pojedynczego skryptu, ale szybko wymknie się spod kontroli, jeśli uruchomisz wiele skryptów, w którym to przypadku zawsze możesz utworzyć plik wsadowy ze wszystkimi tymi wywołaniami. Nie jest to najbardziej elegancka odpowiedź, ale działa.

Czy istnieje sposób, aby aliasy dla różnych wersji Pythona były jak Linux?

użytkownik2796022
źródło