Jaki jest właściwy sposób zarządzania wieloma wersjami Pythona?
21
Mam maszynę z zainstalowanym Pythonem 2.6 jako domyślnym Pythonem. Następnie zainstalowałem Python 2.7 i ręcznie utworzyłem / usr / bin / python jako dowiązanie symboliczne do nowej instalacji.
Zmiana domyślnego Pythona (lub Perla itp.) W systemie operacyjnym to naprawdę zły pomysł. Ten interpreter jest właściwie częścią systemu operacyjnego i mogą istnieć inne komponenty systemu operacyjnego napisane specjalnie do pracy z tą wersją interpretera.
Na przykład w Redhat narzędziem yum, które wykonuje aktualizacje oprogramowania systemowego, jest aplikacja python. Naprawdę nie chcesz tego zepsuć. Takie aplikacje mogą zależeć od zainstalowania określonych, być może niestandardowych modułów Pythona, których zainstalowana wersja może nie mieć. Na przykład w Ubuntu uważam, że niektóre z wbudowanych narzędzi systemu operacyjnego napisanych w Pythonie używają ORM o nazwie Storm, który nie jest częścią standardowej biblioteki Pythona. Czy w Twojej czystej instalacji Python 2.7 zainstalowana jest konkretna oczekiwana wersja modułu Storm? Czy ma jakąś wersję Storm? Nie? Właśnie złamałeś część swojego systemu operacyjnego.
Właściwym sposobem na to jest zainstalowanie preferowanej wersji Pythona i skonfigurowanie konta użytkownika, aby z niego korzystać, konfigurując plik .bash_profile, ścieżkę itp. Możesz także zajrzeć do modułu virtualenv dla Pythona.
Poszukałem tutaj Google. Zrobiłbym -1, gdybym miał rep na tym stosie. Dlaczego? Ponieważ sugerowane podejście mówi tylko „zainstaluj preferowaną wersję Pythona”. Jak to zrobić bez ukrywania systemowego pytona?
jez
@jez Użytkownicy powinni zapoznać się z instrukcją instalacji swojej aplikacji i wybranej kombinacji systemu operacyjnego. Ogólnie rzecz biorąc, pakiety instalatora będą instalowane w łagodnej lokalizacji, a nie nadpisują podstawowe komponenty systemu operacyjnego, więc nadpisanie wersji systemu byłoby szczególnym przypadkiem.
Simon Hibbs,
8
Jak naprawić ten bałagan?
Nic więcej niż ponowna instalacja python. Cofnie twoją zmianę (dowiązanie symboliczne).
Dlaczego chcesz to domyślnie? Za każdym razem, gdy jest to potrzebne, po prostu użyj python2.7lub #!/usr/bin/python2.7dołącz (shebang) na początku swoich (wykonywalnych) skryptów.
Jeśli nalegasz na to, aby mieć python2.7wartość domyślną dla całego systemu, użyj późniejszej wersji Ubuntu (obecnie jest to Ubuntu 11.04, o nazwie kodowej Natty). Używa tej wersji jako domyślnej.
W przyszłości unikaj ręcznych interwencji, takich jak to, co robiłeś z dowiązaniem symbolicznym. Jest to szczególnie prawdziwe w przypadku plików zarządzanych dystrybucyjnie, a szczególnie w przypadku złożonych bestii, takich jak instalacje w języku Python.
Pomyślałem, że rozsądne jest zmienić domyślną instalację Pythona po aktualizacji. Chcę to domyślnie, ponieważ chcę pracować z nowszym pytonem ... jako domyślnie. Kiedy piszę pythonz bash, chcę uzyskać nowy python. Czy jest na to lepszy sposób niż to, co zrobiłem?
ripper234
Dla przypomnienia - nie sądzę, żeby coś było nie tak w sposobie instalacji Pythona 2.7. Jedynym „niekonwencjonalnym” posunięciem była zmiana dowiązania symbolicznego, co moim zdaniem było właściwym sposobem na ustawienie go jako domyślnego. Czy jest lepszy sposób?
ripper234
2
@ripper: Chyba przychodzę do tego wątku trochę za późno. Jak mówi Tshepang, pythonpakiet Ubuntu określa wersję systemu. Teraz można dostosować instalację, aby Python 2.7 był domyślny, tworząc własny pakiet Python itp., Ale jeśli tak, to skutecznie staniesz się opiekunem instalacji Python zamiast Ubuntu i będziesz musiał nauczyć się, jak Python jest zarządzany na Debian / Ubuntu. Należy pamiętać, że inne pakiety Pythona w systemie są skonfigurowane do domyślnej pracy z wersją 2.6, więc oprócz czegokolwiek innego może dojść do uszkodzenia.
Faheem Mitha
1
@Tshepang: Dobre podsumowanie!
Faheem Mitha
12
@ ripper234: Nie zmieniaj niczego /usr/bin, co jest zastrzeżone dla twojej dystrybucji. Zamiast tego utwórz /usr/local/bin/pythonsymboliczny link do python2.7. Następnie skrypty używające #!/usr/bin/env python(zalecanego idiomu), a także pisanie pythonw wierszu poleceń, uruchomią Python 2.7. Skrypty z dystrybucji, które chcą od Pythona dystrybucji, mogą nadal wywoływać #!/usr/bin/python.
Gilles „SO- przestań być zły”
2
Zastrzeżenie: Właśnie opublikowałem tę samą odpowiedź na przepełnienie stosu:
Oto moje podejście do problemu. Działa dla Python3. Główne cechy to:
Każda wersja Pythona jest kompilowana ze źródła
Wszystkie wersje są instalowane lokalnie
Nie zmienia w żaden sposób domyślnej instalacji Pythona w twoim systemie
Każda wersja Pythona jest izolowana za pomocą virtualenv
Kroki są następujące:
Jeśli masz kilka dodatkowych wersji Pythona zainstalowanych w inny sposób, pozbądź się ich, np. Usuń $ HOME / .local / lib / python3.x itp. (Także te zainstalowane globalnie). Nie dotykaj jednak domyślnej wersji python3 systemu.
Pobierz źródło dla różnych wersji Pythona w następującej strukturze katalogów:
$HOME/
python_versions/: download Python-*.tgz packages here and"tar xvf" them.You'll get directories like this:
Python-3.4.8/
Python-3.6.5/
Python-3.x.y/
...
W każdym katalogu „Python-3.xy /” wykonaj następujące czynności ( NIE używaj „sudo” w żadnym z kroków!):
mkdir root
./configure --prefix=$PWD/root
make -j 2
make install
virtualenv --no-site-packages -p root/bin/python3.x env
W „python_versions /” utwórz pliki takie jak to:
env_python3x.bash:#!/bin/bash
echo "type deactivate to exit"
source $HOME/python_versions/Python-3.x.y/env/bin/activate
Teraz, za każdym razem, gdy chcesz wybrać Python3.x, zrób
source $HOME/python_versions/env_python3x.bash
wejść do virtualenv
Będąc w virtualenv, zainstaluj swoje ulubione pakiety Pythona za pomocą
pip install --upgrade package_name
Aby wyjść z wersji virtualenv i python, po prostu wpisz „dezaktywuj”
Często umieszczamy wiele dystrybucji Pythona na Macu i Ubuntu i oto moja rekomendacja.
Pozostaw python systemowy niezaprzeczalny: nigdy go nie używaj.
Jeśli potrzebujesz tylko jednej podstawowej dystrybucji Pythona, pobierz i zainstaluj Canopy z enthought. Podczas instalacji wybierz „ustaw jako mój python systemowy”, a następnie możesz zainstalować pakiety z menedżera pakietów GUI Canopy.
Baldachim jest również kompatybilny od piprazu z poleceniem menedżera pakietów PyPi, które pozwala instalować pakiety (np. pip install python-twitter)
Jeśli planujesz używać środowisk wirtualnych (tj. Tworzysz programy w języku Python i chcesz dla nich dedykowanego, czystego środowiska w języku Python, z łatwym sposobem przełączania się między nimi), poleciłbym Anacondę zamiast Canopy, ponieważ jest to narzędzie do zarządzania środowiskiem wirtualnym . To ci pozwoli
# Increase the chances that the build will have all dependencies.# https://github.com/pyenv/pyenv/wiki/Common-build-problems
sudo apt build-dep python3
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
xz-utils tk-dev libffi-dev liblzma-dev python-openssl git
# Build and install a Python version from source.
pyenv install 3.8.0
Wyświetl dostępne wersje Pythona:
pyenv versions
Teraz mamy:
* system (set by /home/cirsan01/.pyenv/version)3.8.0
Nic więcej niż ponowna instalacja
python
. Cofnie twoją zmianę (dowiązanie symboliczne).Dlaczego chcesz to domyślnie? Za każdym razem, gdy jest to potrzebne, po prostu użyj
python2.7
lub#!/usr/bin/python2.7
dołącz (shebang) na początku swoich (wykonywalnych) skryptów.Jeśli nalegasz na to, aby mieć
python2.7
wartość domyślną dla całego systemu, użyj późniejszej wersji Ubuntu (obecnie jest to Ubuntu 11.04, o nazwie kodowej Natty). Używa tej wersji jako domyślnej.W przyszłości unikaj ręcznych interwencji, takich jak to, co robiłeś z dowiązaniem symbolicznym. Jest to szczególnie prawdziwe w przypadku plików zarządzanych dystrybucyjnie, a szczególnie w przypadku złożonych bestii, takich jak instalacje w języku Python.
źródło
python
z bash, chcę uzyskać nowy python. Czy jest na to lepszy sposób niż to, co zrobiłem?python
pakiet Ubuntu określa wersję systemu. Teraz można dostosować instalację, aby Python 2.7 był domyślny, tworząc własny pakiet Python itp., Ale jeśli tak, to skutecznie staniesz się opiekunem instalacji Python zamiast Ubuntu i będziesz musiał nauczyć się, jak Python jest zarządzany na Debian / Ubuntu. Należy pamiętać, że inne pakiety Pythona w systemie są skonfigurowane do domyślnej pracy z wersją 2.6, więc oprócz czegokolwiek innego może dojść do uszkodzenia./usr/bin
, co jest zastrzeżone dla twojej dystrybucji. Zamiast tego utwórz/usr/local/bin/python
symboliczny link dopython2.7
. Następnie skrypty używające#!/usr/bin/env python
(zalecanego idiomu), a także pisaniepython
w wierszu poleceń, uruchomią Python 2.7. Skrypty z dystrybucji, które chcą od Pythona dystrybucji, mogą nadal wywoływać#!/usr/bin/python
.Zastrzeżenie: Właśnie opublikowałem tę samą odpowiedź na przepełnienie stosu:
/programming/2812520/pip-dealing-with-multiple-python-versions/50319252
Oto moje podejście do problemu. Działa dla Python3. Główne cechy to:
Kroki są następujące:
Jeśli masz kilka dodatkowych wersji Pythona zainstalowanych w inny sposób, pozbądź się ich, np. Usuń $ HOME / .local / lib / python3.x itp. (Także te zainstalowane globalnie). Nie dotykaj jednak domyślnej wersji python3 systemu.
Pobierz źródło dla różnych wersji Pythona w następującej strukturze katalogów:
W każdym katalogu „Python-3.xy /” wykonaj następujące czynności ( NIE używaj „sudo” w żadnym z kroków!):
W „python_versions /” utwórz pliki takie jak to:
Teraz, za każdym razem, gdy chcesz wybrać Python3.x, zrób
wejść do virtualenv
Będąc w virtualenv, zainstaluj swoje ulubione pakiety Pythona za pomocą
Aby wyjść z wersji virtualenv i python, po prostu wpisz „dezaktywuj”
źródło
Często umieszczamy wiele dystrybucji Pythona na Macu i Ubuntu i oto moja rekomendacja.
Pozostaw python systemowy niezaprzeczalny: nigdy go nie używaj.
Jeśli potrzebujesz tylko jednej podstawowej dystrybucji Pythona, pobierz i zainstaluj Canopy z enthought. Podczas instalacji wybierz „ustaw jako mój python systemowy”, a następnie możesz zainstalować pakiety z menedżera pakietów GUI Canopy.
pip
razu z poleceniem menedżera pakietów PyPi, które pozwala instalować pakiety (np.pip install python-twitter
)źródło
pyenv
https://github.com/pyenv/pyenv
Pyenv pozwala zarządzać wieloma wersjami Pythona bez sudo dla jednego użytkownika, podobnie jak Node.js NVM i Ruby RVM .
Zainstaluj Pyenv:
Następnie dodaj do
.bashrc
:Znajdź wersję Python do zainstalowania:
Zainstaluj żądaną wersję Pythona:
Wyświetl dostępne wersje Pythona:
Teraz mamy:
Wybierz inną wersję Pythona:
Oba wyjścia:
Możemy teraz przystąpić do instalowania i używania pakietów normalnie:
Możemy potwierdzić, że wszystko jest zainstalowane lokalnie w naszym czystym środowisku dzięki:
Wykorzystanie według projektu
W poprzedniej sekcji widzieliśmy, jak używać pyenv w konfiguracji globalnej.
Jednak zwykle chcesz ustawić konkretny python i wersję pakietu dla poszczególnych projektów. Oto jak to zrobić.
Najpierw zainstaluj żądaną wersję Pythona jak poprzednio.
Następnie z poziomu katalogu projektu ustaw żądaną wersję Pythona za pomocą:
który tworzy plik
.python-version
zawierający ciąg wersji.A teraz zainstalujmy lokalnie pakiet tylko dla naszego projektu: TODO: nie ma dobrego sposobu na to: /programming/30407446/pyenv-choose-virtualenv-directory/59267972#59267972
Teraz, gdy ktoś chce użyć twojego projektu, zrobi:
co ustawia poprawną wersję Pythona.
Powiązane wątki:
Testowane na Ubuntu 18.04, pyenv 1.2.15.
źródło