Wiele wersji Pythona na tym samym komputerze?

87

Czy jest gdzieś oficjalna dokumentacja na stronie Pythona, jak zainstalować i uruchomić wiele wersji Pythona na tej samej maszynie w systemie Linux?

Mogę znaleźć miliardy postów na blogu i odpowiedzi, ale chcę wiedzieć, czy istnieje „standardowy” oficjalny sposób zrobienia tego?

Czy to wszystko zależy od systemu operacyjnego?

Andriy Drozdyuk
źródło

Odpowiedzi:

79

Myślę, że jest całkowicie niezależny. Wystarczy je zainstalować, a następnie masz komendy np /usr/bin/python2.5i /usr/bin/python2.6. Link /usr/bin/pythondo tego, którego chcesz używać jako domyślnego.

Wszystkie biblioteki i tak znajdują się w osobnych folderach (nazwanych według wersji).

Jeśli chcesz skompilować wersje ręcznie, jest to z pliku readme kodu źródłowego Pythona:

Instalowanie wielu wersji

W systemach Unix i Mac, jeśli zamierzasz zainstalować wiele wersji Pythona przy użyciu tego samego prefiksu instalacyjnego (argument --prefix skryptu konfiguracyjnego), musisz uważać, aby Twój podstawowy plik wykonywalny Pythona nie został nadpisany podczas instalacji innej wersji. Wszystkie pliki i katalogi zainstalowane za pomocą polecenia "make altinstall" zawierają wersję główną i podrzędną, dzięki czemu mogą istnieć obok siebie. "make install" tworzy również $ {prefiks} / bin / python3, który odnosi się do $ {prefiks} /bin/pythonX.Y. Jeśli zamierzasz zainstalować wiele wersji przy użyciu tego samego prefiksu, musisz zdecydować, która wersja (jeśli w ogóle) jest wersją „podstawową”. Zainstaluj tę wersję za pomocą polecenia „make install”. Zainstaluj wszystkie inne wersje za pomocą polecenia „make altinstall”.

Na przykład, jeśli chcesz zainstalować Python 2.5, 2.6 i 3.0, gdzie 2.6 jest wersją podstawową, powinieneś wykonać polecenie „make install” w katalogu kompilacji 2.6 i „make altinstall” w pozostałych.

Felix Kling
źródło
5
Dzięki, polecenie „make install” na podstawowym i „make altinstall” na drugim jest jasne.
Andriy Drozdyuk,
4
Czy jest jakiś poprawny sposób udostępniania bibliotek między wersjami? Powiedzmy, że mam MySQLdb w wersji 2.6, a następnie zainstalowałem 2.7. jak udostępnić MySQLdb również dla wersji 2.7?
romeroqj
Wszystkie informacje, które podajesz, dotyczą systemów Unix / Linux i Mac OS, więc wyraźnie nie są „całkowicie niezależne” od systemu operacyjnego, o co prosi OP. W przypadku systemu Windows proces jest zupełnie inny, ale równie łatwy.
wwwayne
28

W systemie Windows są instalowane w oddzielnych folderach „C: \ python26” i „C: \ python31”, ale pliki wykonywalne mają tę samą nazwę „python.exe”.

Utworzyłem kolejny folder „C: \ python” zawierający „python.bat” i „python3.bat”, które służą jako opakowania odpowiednio dla „python26” i „python31”, i dodałem „C: \ python” do PATHzmiennej środowiskowej.

Dzięki temu mogę wpisać pythonlub python3w moich opakowaniach Pythona .bat, aby uruchomić ten, który chcę.

W systemie Linux możesz użyć tej #!sztuczki, aby określić, której wersji ma używać skrypt.

Blaszany Człowiek
źródło
Co dodać do tych plików .bat?
Aidis
Nie głosuję pozytywnie na tę odpowiedź tylko dlatego, że jest ona bardzo specyficzna dla systemu Windows, a pytanie dotyczyło Linuksa, poza tym świetne informacje.
Jim Aho,
2
Użytkownik już nie istnieje, bardzo chciałem tego pliku wsadowego
Wargog
6
Oto co umieściłem w moim pliku python.bat (tylko jeden wiersz): "c: \ python27 \ python% *" Następnie wywołuję go normalnie, tj. „Python test.py” i% * pobierze wszystkie argumenty i przekaż go do właściwego pliku wykonywalnego. Możesz także użyć mklink bezpośrednio w folderze C: \ bin. Zobacz tutaj, aby uzyskać szczegółowe informacje: stackoverflow.com/a/13953614/865929
Sean Glover
1
Teraz możesz po prostu uruchomić py -3.4lub, py -2.7a program py(pod C:\Windows) wybierze ten interpreter Pythona (zakładając, że jest zainstalowany).
JamesThomasMoon1979
12

Aktualizacja 2019: używanie asdf

Obecnie sugeruję użycie asdf do zainstalowania obok siebie różnych wersji interpreterów Pythona.

Uwaga 1: asdfdziała nie tylko w Pythonie, ale we wszystkich głównych językach.

Uwaga 2: asdfdziała dobrze w połączeniu z popularnymi menedżerami pakietów, takimi jak pipenv i poezja .

Jeśli masz zainstalowany asdf , możesz łatwo pobrać / zainstalować nowe interpretery Pythona:

# Install Python plugin for asdf:
asdf plugin-add python

# List all available Python interpreters:
asdf list-all python

# Install the Python interpreters that you need:
asdf install python 3.7.4
asdf install python 3.6.9
# etc...

# If you want to define the global version:
asdf global python 3.7.4

# If you want to define the local (project) version:
# (this creates a file .tool-versions in the current directory.)
asdf local python 3.7.4

Stara odpowiedź: Zainstaluj Pythona ze źródła

Jeśli chcesz zainstalować wiele wersji Pythona (obok głównej) na Ubuntu / Mint : (powinno działać podobnie na innych Uniksach).

1) Zainstaluj wymagane pakiety do kompilacji źródła

$ sudo apt-get install build-essential checkinstall
$ sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev

2) Pobierz i wyodrębnij żądaną wersję Pythona

Pobierz źródło Python dla systemu Linux jako archiwum tar i przenieś je do /usr/src.

Rozpakuj pobrany pakiet na miejscu. (zastąp „x” swoją pobraną wersją)

$ sudo tar xzf Python-x.x.x.tgz

3) Skompiluj i zainstaluj źródło Pythona

$ cd Python-x.x.x
$ sudo ./configure
$ sudo make altinstall

Twój nowy bin Pythona znajduje się teraz w /usr/local/bin. Możesz przetestować nową wersję:

$ pythonX.X -V
Python x.x.x
$ which pythonX.X
/usr/local/bin/pythonX.X

# Pip is now available for this version as well:
$ pipX.X -V
pip X.X.X from /usr/local/lib/pythonX.X/site-packages (python X.X)
Rotareti
źródło
6

Sposób instalowania różnych wersji Pythona jest rzeczywiście zależny od systemu operacyjnego.

Jeśli jednak korzystasz z systemu Linux, możesz użyć narzędzia takiego jak pythonbrew lub pythonz, które pomoże Ci łatwo zarządzać różnymi wersjami i przełączać się między nimi.

Rodrigue
źródło
Zainstalowałem na komputerze Mac z konfiguracją / make altinstall. Na razie żadnych problemów.
Evgeny
Czy można podać $user1inną wersję Pythona niż domyślna?
Roland,
1
@Roland pyenvbędzie do tego pasował . Z pliku readme w linku zamieszczonym powyżej:> [Pozwala] zmienić globalną wersję Pythona dla każdego użytkownika.
theeddieh
5

Używam Maca, a najlepszym sposobem, który działał, jest używanie pyenv!

Poniższe polecenia są przeznaczone dla komputerów Mac, ale są bardzo podobne do Linuksa (zobacz poniższe linki)

#Install pyenv
brew update
brew install pyenv

Powiedzmy, że masz Pythona 3.6 jako podstawową wersję na swoim Macu:

python --version 

Wynik:

Python <your current version>

Teraz zainstaluj python 3.7, najpierw wymień wszystkie

pyenv install -l

Weźmy 3.7.3:

pyenv install 3.7.3

Upewnij się, że uruchamiasz to w Terminalu (dodaj do ~ / .bashrc lub ~ / .zshrc):

export PATH="/Users/username/.pyenv:$PATH"
eval "$(pyenv init -)"

Teraz uruchommy go tylko na otwartym terminalu / powłoce :

pyenv shell 3.7.3

A teraz biegnij

python --version

Wynik:

Python 3.7.3

I nie mniej ważne rozbrojenie go w otwartej powłoce / iTerm:

pyenv shell --unset

Można go uruchomić globalnie lub lokalnie , jak również

Kohn1001
źródło
1

Menedżerowie pakietów - poziom użytkownika

Dla menedżera pakietów, który może zainstalować i zarządzać wieloma wersjami Pythona, są to dobre opcje:

  • pyenv - tylko w stanie instalować i zarządzać wersjami Pythona
  • asdf - potrafi zainstalować i zarządzać wieloma różnymi językami

Zaletą tych menedżerów pakietów jest to, że ich skonfigurowanie i zainstalowanie z nimi wielu wersji języka Python może być łatwiejsze niż zainstalowanie języka Python ze źródła. Zapewniają również polecenia do łatwej zmiany dostępnych wersji języka Python za pomocą podkładek i ustawiania wersji języka Python dla każdego katalogu.

Ta wada jest to, że domyślnie są instalowane na poziomie użytkownika (wewnątrz katalogu domowym) i wymagają trochę konfiguracji na poziomie użytkownika - musisz zmieniać swoich ~/.profilei ~/.bashrclub podobne pliki. Oznacza to, że nie jest łatwo ich używać do instalowania wielu wersji języka Python na całym świecie dla wszystkich użytkowników. Aby to zrobić, możesz zainstalować ze źródła wraz z istniejącą wersją Pythona systemu operacyjnego.


Instalacja ze źródła - dla całego systemu

Będziesz potrzebować uprawnień roota dla tej metody.

Zobacz oficjalną dokumentację Pythona dotyczącą budowania ze źródeł, aby uzyskać dodatkowe informacje i opcje.

/usr/localto wyznaczone miejsce, w którym administrator systemu może zainstalować oprogramowanie współdzielone (dla całego systemu), więc jego podkatalogi są dobrym miejscem do pobrania źródła języka Python i instalacji. Zobacz sekcję 4.9 normy File Hierarchy Standard firmy Linux Foundation .

Zainstaluj wszystkie zależności kompilacji. W systemach opartych na Debianie użyj:

apt update
apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libsqlite3-dev libreadline-dev libffi-dev libbz2-dev

Wybierz wersję Pythona, którą chcesz zainstalować. Zobacz stronę Python Source Release, aby zobaczyć listę.

Pobierz i rozpakuj plik /usr/local/src, zastępując X.X.Xponiżej wersję dla języka Python (tj 3.8.2.).

cd /usr/local/src
wget https://www.python.org/ftp/python/X.X.X/Python-X.X.X.tgz
tar vzxf Python-X.X.X.tgz

Przed budowaniem i instalacją ustaw CFLAGSzmienną środowiskową z niezbędnymi flagami kompilatora C (zobacz makedokumentację GNU ). Zwykle nie jest to konieczne do ogólnego użytku, ale jeśli, na przykład, zamierzasz utworzyć wtyczkę uWSGI w tej wersji Pythona, możesz ustawić flagi -fPIC, z następującymi elementami :

export CFLAGS='-fPIC'

Zmień katalog roboczy na rozpakowany katalog źródłowy języka Python i skonfiguruj plik build. Prawdopodobnie będziesz chciał użyć --enable-optimizationsopcji ./configurepolecenia do optymalizacji sterowanej profilem . Użyć --prefix=/usr/localdo zainstalowania do odpowiednich podkatalogów ( /usr/local/bin, /usr/local/lib, itd.).

cd Python-X.X.X
./configure --enable-optimizations --prefix=/usr/local

Skompiluj projekt makei zainstaluj za pomocą, make altinstallaby uniknąć zastępowania plików podczas instalowania wielu wersji. Zobacz ostrzeżenie na tej stronie dokumentacji kompilacji języka Python.

make -j 4
make altinstall

Wtedy powinieneś być w stanie uruchomić swoje nowe wersje Pythona i pip z pythonX.Xi pipX.X(tj. python3.8I pip3.8). Zwróć uwagę, że jeśli podrzędna wersja Twojej nowej instalacji jest taka sama jak wersja systemu operacyjnego (na przykład jeśli instalowałeś python3.8.4, a system operacyjny używał python3.8.2), musisz określić całą ścieżkę ( /usr/local/bin/pythonX.X) lub ustawić alias do korzystania z tej wersji.

niebieski kot
źródło
0

Najbardziej zależy to od używanego systemu dystrybucji pakietów. Na przykład za pomocą MacPorts możesz zainstalować wiele pakietów Pythona i użyć pyselectnarzędzia do łatwego przełączania między nimi domyślnych. Przez cały czas możesz wywoływać różne interpretery Pythona, podając pełną ścieżkę, i możesz łączyć się ze wszystkimi bibliotekami i nagłówkami Pythona, podając pełne ścieżki do nich.

Zasadniczo, niezależnie od sposobu instalowania wersji, o ile instalacje są oddzielne, możesz je uruchamiać oddzielnie.

Seth Johnson
źródło
Co to jest system dystrybucji pakietów?
Andriy Drozdyuk
@drozzy: Na przykład RPM używany przez OpenSuse lub apt używany w dystrybucjach opartych na Debianie lub portage używany przez Gentoo itp. Zasadniczo jest to narzędzie do instalowania oprogramowania.
Felix Kling
0

Zrobiłem to z nawigatorem Anaconda. Zainstalowałem nawigator Anaconda i stworzyłem dwa różne środowiska programistyczne z różnymi wersjami Pythona

i przełączaj się między różnymi wersjami Pythona, przełączając lub aktywując i dezaktywując środowiska.

najpierw zainstaluj anaconda navigator, a następnie utwórz środowiska.

zobacz pomoc dotyczącą zarządzania środowiskami

https://docs.anaconda.com/anaconda/navigator/tutorials/manage-environments/

Oto wideo, jak zrobić to z condą

https://youtu.be/EGaw6VXV3GI

mohitesachin217
źródło