Jak zainstalować najnowszą wersję Python 2.7.X lub 3.X na Ubuntu?


183

Chcę zainstalować najnowszą wersję archiwum Python na Ubuntu, pobraną ze strony http://python.org/download/ .

Czy to poprawny sposób instalacji?

./configure
make
make install

Jeśli nie, jak to zrobić?


1
Pewnego razu wyobrażam sobie, że został o to poproszony w celu zainstalowania nowszej wersji Pythona na Ubuntu. Teraz wymagane jest zainstalowanie starszej wersji Pythona na Ubuntu (ponieważ wciąż potrzebujemy Pythona 2.7 dla wielu rzeczy) ... tl; dr: ta odpowiedź nie jest już aktualna / poprawna. Zamiast tego zakładając, że python3 jest instalowany domyślnie (i być może minimalny python2.x), a następnie uruchom:sudo apt-get install python-2.7 python-pip
michael,

@michael_n o czym ty mówisz? kompilacja ze źródła nie powoduje, że ta odpowiedź jest niepoprawna lub nieaktualna. to tylko inna metoda. w razie potrzeby możesz użyć apt do zautomatyzowania procesu.

używasz tego, czego potrzebujesz. Naprawdę nie rozumiem, jak to potwierdza twoje twierdzenie, że to jest nieaktualne. tak jak sam powiedziałeś, używasz go, kiedy jest to konieczne, ponieważ może nie być dostępny. Na przykład, podsystem Windows dla Linuksa korzysta z niektórych przestarzałych pakietów oprogramowania, nawet jeśli dystrybucją jest Ubuntu 16.04.1 (beta) i używa python2.6.2, a python3 nawet jeśli bieżącym jest python2.7.12. W takim razie powinienem skompilować, jeśli chcę mieć aktualne pakiety

1
@jargonjunkie jesteś nie na temat, ale masz rację. Jeśli pytanie brzmi „jak zainstalować Python 2.7 na Ubuntu 16.04+”, którym jest (ponieważ 16.04 jest już dostępny, o co mi chodzi), to po prostu sudo apt-get install python2.7. Jest to nie tylko łatwiejsze, to jedyna poprawna odpowiedź, ponieważ jest to jedyny sposób, w jaki będziesz w stanie poradzić sobie z instalowaniem modułów Pythona za pomocą apt-get i ich zależności.
Michael

mam nadzieję, że to pomoże zilustrować (dodana odpowiedź). ekosystem python jest bardzo szczególny / wybredny i możesz łatwo dostać się do „piekła zależności”, jeśli nie starannie zbudujesz
michael

Odpowiedzi:


199

Najpierw zainstaluj niektóre zależności:

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

Następnie pobierz za pomocą następującego polecenia:

version=2.7.13
cd ~/Downloads/
wget https://www.python.org/ftp/python/$version/Python-$version.tgz

Wypakuj i przejdź do katalogu:

tar -xvf Python-$version.tgz
cd Python-$version

Teraz zainstaluj za pomocą polecenia, które właśnie wypróbowałeś, checkinstallzamiast tego, aby ułatwić odinstalowanie w razie potrzeby:

./configure
make
sudo checkinstall

Zmień versionna dowolną potrzebną wersję ( version=2.7.1lub version=3.6.0na przykład).


20
Użyj sudo make installi nie altinstallustawiaj go jako domyślnej wersji Pythona
Shagun Sodhani

użyj, CXX=g++ ./configurejeśli ./configure wydaje ostrzeżenie, że nie znaleziono g ++
srj

2
po instalacji, zgodnie z instrukcją powyżej, jakie polecenia uruchamiam w konsoli, aby sprawdzić, czy rzeczywiście jest zainstalowana?
J86

9
To dość niezwykłe, że najlepsza odpowiedź na proste pytanie „jak zainstalować Python” zawiera takie straszne ostrzeżenie, to tak, jakby „to najlepszy sposób, w jaki wiemy, jak zainstalować Python i może bardzo zepsuć twój system” ... To także bardzo zaskakujące, że oficjalna strona Python ma mnóstwo pobrań, a nie jedną stronę z instrukcjami instalacji.
patb

4
pat - najlepszą odpowiedzią na proste pytanie „jak zainstalować python” jest sudo apt-get install pythonbardziej skomplikowana odpowiedź: „jak zainstalować najnowszy python”, implikacją jest „ze źródła”. Ten sam problem będzie występować w dowolnym systemie operacyjnym, chyba że instalujesz wstępnie skompilowane pliki binarne od strony trzeciej, co jest znowu ryzykowne w każdym systemie operacyjnym (i różni się znacznie w różnych systemach operacyjnych). Również ta odpowiedź pochodzi z 2012 r .; więcej najnowszych porad można znaleźć na stronie askubuntu.com/questions/101591/…
michael,

181

Jeśli naprawdę nie masz ochoty samodzielnie go skompilować, preferowanym sposobem jest użycie DeadSnakes PPA do zainstalowania wersji Pythona, które nie są domyślnie dołączone:

sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
sudo apt-get install python2.7

Dostępne są również inne wersje, takie jak python2.4lub python3.6itp.


13
Uwaga programu: jeśli korzystasz z wersji 10.04, przed użyciem add-apt-repository może być konieczne zainstalowanie właściwości python-software-properties.
Craig Maloney,

3
Zalecane jest budowanie Pythona w środowisku lokalnym zamiast instalowania go z plików binarnych przed kompilacją
pylover

16
+1 :)really have a burning desire to compile it yourself
Watt

5
Pominięto wspomnieć, że: 1. ppanie jest oficjalnie zatwierdzony, więc najbezpieczniejszym sposobem jest kompilacja ze źródła. 2. Spowoduje to powstanie globalnego Pythona, którego użytkownicy nie sudomogą modyfikować ani instalować pakietów, a nie lokalnego. 3. Wiele pytonów można zainstalować lokalnie w różnych lokalizacjach, budując ze źródła.
Ioannis Filippidis,

2
apt-get install python2.7To zainstaluje binarny python2.7 zamiast python ... brzydki !!
Dhawal

26

Kontynuując dokumentowanie tego w najnowszych wersjach Ubuntu 1 : dla serwera Ubuntu 16.04.1 domyślnym językiem Python jest wersja 3.5, a Python 2.7 nie jest domyślnie instalowany. Przy nowej instalacji (pamiętaj, że nie ma nawet pythonpliku wykonywalnego):

$ type python3 python2 python 
python3 is /usr/bin/python3
-bash: type: python2: not found
-bash: type: python: not found

$ python3 --version 
Python 3.5.2

$ python --version 
The program 'python' can be found in the following packages:
 * python-minimal
 * python3
Try: sudo apt install <selected package>

Uwaga: Przed kontynuowaniem, prawdopodobnie będziesz chciał zrobić szybkie sudo apt-get update, sudo apt-get upgradei sudo apt-get dist-upgrade(proszę zrobić notatkę dokładnie co te polecenia są w rzeczywistości robi; Jestem zakładając nową instalację tutaj).

Instalacja Pythona 2.7 jest tak prosta jak:

$ sudo apt-get install python2.7

Początkowe wyniki instalacji Pythona 2.7 są następujące:

$ sudo apt-get install python2.7
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  libpython2.7-minimal libpython2.7-stdlib python2.7-minimal
Suggested packages:
  python2.7-doc binutils binfmt-support
The following NEW packages will be installed:
  libpython2.7-minimal libpython2.7-stdlib python2.7 python2.7-minimal
0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
Need to get 3,735 kB of archives.
After this operation, 15.8 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
...etc, etc...

Po zainstalowaniu Pythona 2.7

$ type python3 python2.7 python3.5 python2 python
python3 is /usr/bin/python3
python2.7 is /usr/bin/python2.7
python3.5 is /usr/bin/python3.5
bash: type: python2: not found
bash: type: python: not found

Ale wciąż istnieje problem, ponieważ nie można jeszcze zainstalować modułów PyPI za pośrednictwem pip- np. Jeśli chcesz notebooka jupyter lub najnowszej wersji scipy lub numpy (itp.), Musisz zainstalować, pipa następnie pip installte i nadal przechodzić do apt-getzainstalować wszelkie potrzebne zależności systemowe , takie jak graphviz lub podstawowe biblioteki systemowe.

$ type pip3 pip2 pip
bash: type: pip3: not found
bash: type: pip2: not found
bash: type: pip: not found

$ python3 -m pip --version 
/usr/bin/python3: No module named pip

Tak więc instalowanie pipa jest tak proste, jak sudo apt-get install python-pip:

$ sudo apt-cache search -n pip | egrep '^python[0-9]*-pip'
python-pip - alternative Python package installer
python-pip-whl - alternative Python package installer
python3-pip - alternative Python package installer - Python 3 version of the package

Będziesz potrzebował zarówno python-pipdla Python 2.7, jak pipi python3-pipdla Python 3 pip. Instalacja przez z apt-getpewnością zainstaluje wymagane zależności; np. oto dane wyjściowe do instalacji pip2:

$ sudo apt-get install python-pip
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  binutils build-essential dpkg-dev fakeroot g++ g++-5 gcc gcc-5 libalgorithm-diff-perl
  libalgorithm-diff-xs-perl libalgorithm-merge-perl libasan2 libatomic1 libc-dev-bin libc6-dev
  libcc1-0 libcilkrts5 libdpkg-perl libexpat1-dev libfakeroot libfile-fcntllock-perl libgcc-5-dev
  libgomp1 libitm1 liblsan0 libmpx0 libpython-all-dev libpython-dev libpython-stdlib libpython2.7
  libpython2.7-dev libquadmath0 libstdc++-5-dev libtsan0 libubsan0 linux-libc-dev make
  manpages-dev python python-all python-all-dev python-dev python-minimal python-pip-whl
  python-pkg-resources python-setuptools python-wheel python2.7-dev
Suggested packages:
  binutils-doc debian-keyring g++-multilib g++-5-multilib gcc-5-doc libstdc++6-5-dbg gcc-multilib
  autoconf automake libtool flex bison gdb gcc-doc gcc-5-multilib gcc-5-locales libgcc1-dbg
  libgomp1-dbg libitm1-dbg libatomic1-dbg libasan2-dbg liblsan0-dbg libtsan0-dbg libubsan0-dbg
  libcilkrts5-dbg libmpx0-dbg libquadmath0-dbg glibc-doc libstdc++-5-doc make-doc python-doc
  python-tk python-setuptools-doc
The following NEW packages will be installed:
  binutils build-essential dpkg-dev fakeroot g++ g++-5 gcc gcc-5 libalgorithm-diff-perl
  libalgorithm-diff-xs-perl libalgorithm-merge-perl libasan2 libatomic1 libc-dev-bin libc6-dev
  libcc1-0 libcilkrts5 libdpkg-perl libexpat1-dev libfakeroot libfile-fcntllock-perl libgcc-5-dev
  libgomp1 libitm1 liblsan0 libmpx0 libpython-all-dev libpython-dev libpython-stdlib libpython2.7
  libpython2.7-dev libquadmath0 libstdc++-5-dev libtsan0 libubsan0 linux-libc-dev make
  manpages-dev python python-all python-all-dev python-dev python-minimal python-pip
  python-pip-whl python-pkg-resources python-setuptools python-wheel python2.7-dev
0 upgraded, 49 newly installed, 0 to remove and 0 not upgraded.
Need to get 61.1 MB of archives.
After this operation, 169 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
...etc...

W rezultacie dzieje się ciekawa rzecz: masz teraz „standard” (i PEP zalecane) python2i python3(które są tylko dowiązaniami symbolicznymi do Pythona 2.7 i Pythona 3.5):

$ type python3 python2 python python2.7 python3.5 
python3 is /usr/bin/python3
python2 is /usr/bin/python2
python is /usr/bin/python
python2.7 is /usr/bin/python2.7
python3.5 is /usr/bin/python3.5

Będziesz także chciał sudo apt-get install python3-pip; przed instalacją masz:

$ type pip pip2 pip3
pip is /usr/bin/pip
pip2 is /usr/bin/pip2
-bash: type: pip3: not found

$ python2 -m pip --version 
pip 8.1.1 from /usr/lib/python2.7/dist-packages (python 2.7)

$ python3 -m pip --version 
/usr/bin/python3: No module named pip

Po zainstalowaniu pip3,

$ sudo apt-get install python3-pip
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  libpython3-dev libpython3.5-dev python3-dev python3-setuptools python3-wheel python3.5-dev
Suggested packages:
  python-setuptools-doc
The following NEW packages will be installed:
  libpython3-dev libpython3.5-dev python3-dev python3-pip python3-setuptools python3-wheel python3.5-dev
0 upgraded, 7 newly installed, 0 to remove and 0 not upgraded.
Need to get 38.0 MB of archives.
After this operation, 55.2 MB of additional disk space will be used.
Do you want to continue? [Y/n] 
...etc...

Powstałe wersje:

$ type python python2 python3 pip pip2 pip3
python is /usr/bin/python
python2 is hashed (/usr/bin/python2)
python3 is hashed (/usr/bin/python3)
pip is /usr/bin/pip
pip2 is /usr/bin/pip2
pip3 is /usr/bin/pip3

$ pip --version 
pip 8.1.1 from /usr/lib/python2.7/dist-packages (python 2.7)

$ pip3 --version 
pip 8.1.1 from /usr/lib/python3/dist-packages (python 3.5)

$ python2 -m pip --version 
pip 8.1.1 from /usr/lib/python2.7/dist-packages (python 2.7)

$ python3 -m pip --version 
pip 8.1.1 from /usr/lib/python3/dist-packages (python 3.5)

I ostatnia rzecz, zanim zaczniesz instalować wszystkie swoje ulubione moduły PyPI w Pythonie: prawdopodobnie będziesz musiał zaktualizować sam pip (zarówno pip2, jak i pip3 osobno; nie ma też znaczenia, czy pipjest wywoływany przez pythonpliki wykonywalne, czy pippliki wykonywalne, aktualne aktualizacje są przechowywane w /usr/lib):

$ sudo -H python2 -m pip install --upgrade pip
...
$ sudo -H python3 -m pip install --upgrade pip
...

Możesz teraz uruchomić pipwersję autonomiczną lub wersję w pakiecie python(przez python -m pip {command}).


[1] Podsumowanie historyczne: starsze Ubuntu miało tylko Python 2.6, a zatem wszystkie różne metody instalacji Python 2.7+. Później, po dodaniu Python 2.7 do publicznych repozytoriów, nadal mieliśmy takie samo wyzwanie, aby zainstalować najnowszy Python 2.7 z najnowszymi poprawkami, co było (zbyt) często konieczne. Dzisiejsza sytuacja jest znacznie lepsza / prostsza: obecne Python 2.7 i 3.5 (w zasadzie tylko dwie wersje platformy Python, na których zależy ludziom), które są teraz w publicznych repozytoriach, są bardzo stabilne, więc teraz naprawdę musimy się martwić o instalację najnowszej moduły python , a nie najnowszy python . Więc teraz problem „najnowszej wersji” Pythona częściowo wyszedł z repozytoriów systemów operacyjnych apti do PyPI i pip.)


2
Postępując zgodnie z instrukcjami na Ubuntu 16.04.1 LTS, pomyślnie skonfiguruj Python 2.7 i pip w następujący sposób: sudo apt-get install python2.7; sudo apt-get install python-pip; sudo -H python2 -m pip install - aktualizacja pip; # Sprawdzanie wersji: $ pip --version -> pip 9.0.1 z /usr/local/lib/python2.7/dist-packages (python 2.7); $ python --version -> Python 2.7.12
Robert Lujo

Przepraszam za moją ignorancję, ale czy mogę wiedzieć, co oznacza skrót, pokazując wersje Pythona?
Failed Scientist

1
@TalhaIrfan To dobre pytanie (i jeśli pozwolisz na uproszczoną odpowiedź): kiedy polecenie zostanie wpisane w bash (jako w / większość powłok), cmd może być aliasem, funkcją lub plikiem wykonywalnym znalezionym w $PATH. Env var PATHto długa lista katalogów z dosłownie tysiącami plików. Aby przyspieszyć znalezienie pliku wykonywalnego, powłoka używa buforowanej tablicy hashtable do szybkiego wyszukiwania. Może stać się nieaktualny, więc „zakodowane” informuje, że zostało „zapamiętane” to polecenie zamapowane na plik wykonywalny unix.stackexchange.com/questions/5609/…
michael,

@ Michael Bardzo dziękuję! To naprawdę przydatna odpowiedź: krótka i rzeczowa!
Failed Scientist

1
@ gaia, możesz zadać osobne pytanie, ponieważ może być konieczne więcej i więcej, aby je zrozumieć (lub jeśli coś się zmieniło, odkąd to napisałem). Być może najpierw sprawdź, czy oba pip (2.7) i pip3(3.x) zostały całkowicie zainstalowane / zaktualizowane, a nie tylko te pierwsze - tj. sudo apt-get install python-pip python3-pipI sudo -H python2 -m pip install --upgrade pipi sudo -H python3 -m pip install --upgrade pip … Lub jeśli to naprawdę jest problem z uprawnieniami (wskazany przez „to działa z” sudo ”), wtedy będzie trochę trudniej wytropić.
Michael

11

12.04

Jeśli podążasz za odpowiedzią Achu , termin libread5-devnależy zmienić na libreadline-gplv2-dev. Zatem pełne polecenie brzmiałoby:

sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev

4

Możesz również pobrać i zainstalować go za pośrednictwem pyenv

#Install Pyenv
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
export PATH=~/.pyenv/bin:/usr/local/hadoop/bin/:$PATH
echo 'export PYENV_ROOT="~/.pyenv"' >> ~/.bash_profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile

#Install Python
pyenv install 2.7.8
pyenv global 2.7.8

pyenv install 3.4.5
pyenv global 3.4.5

Jest to najczystszy sposób na uzyskanie naprawdę aktualnej wersji Pythona na starszej wersji Ubuntu. Zawiera także obsługę virtualenv za pośrednictwem pyenv-virtualenvwtyczki, co ułatwia instalowanie aplikacji o różnych wymaganiach modułowych bez kolizji.
RichVel

2
Dwa ostrzeżenia o pyenv: (1) działa tylko z powłoki bash (lub może zsh, ale na pewno nie z myślnika, którym jest / bin / sh na Ubuntu), i (2) wymaga powłoki logowania (np. bash --login), Która nie jest zawsze łatwe do osiągnięcia np. z Ansible. Najlepszy do użytku interaktywnego, mniej dobry do serwerów skryptowych.
RichVel

0

Głównie odzwierciedlenie tej odpowiedzi z poprawionym wprowadzeniem

Polecam pyenv . Automatyzuje proces kompilacji oprócz instalowania zależności nagłówka (patrz poniżej). Możesz zbudować i zainstalować nową (lub starą) wersję Pythona, po prostu mówiąc pyenv install 3.6.0. Wszystko działa jako użytkownik, więc nie musisz się martwić o zepsucie Pythona używanego przez sam Ubuntu.

W przeciwieństwie do niektórych opcji opartych na apt-repo (np. Deadsnakes), na ogół będzie działał tego samego dnia po wydaniu, pyenv updateponieważ nie musisz czekać, aż ktoś go zapakuje . Zobacz wszystkie wersje, które możesz zainstalowaćpyenv install --list

Zainstaluj pyenv

  1. Zainstaluj narzędzia i nagłówki potrzebne do zbudowania CPythons (egzotyczne pytony, takie jak PyPy lub Jython, mogą mieć inne zależności). Git jest używany przez pyenv, a także umożliwia kompilacje / instalacje gałęzi źródłowych, więc możesz zainstalować cokolwiek 3.8 w tej chwili, tj. Główną gałąź CPython świeżo z GitHub:

    sudo apt-get install -y git
    sudo apt-get install -y build-essential libbz2-dev libssl-dev libreadline-dev \
                            libffi-dev libsqlite3-dev tk-dev
    
    # optional scientific package headers (for Numpy, Matplotlib, SciPy, etc.)
    sudo apt-get install -y libpng-dev libfreetype6-dev    
  2. Uruchom skrypt instalatora (instaluje pyenv i kilka bardzo przydatnych wtyczek pyenv autorstwa oryginalnego autora; więcej informacji tutaj )

    curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
  3. Dodaj wiersze inicjujące do swojego ~/.profilelub ~/.bashrc(wspomina o tym na końcu skryptu instalacyjnego):

    export PATH="~/.pyenv/bin:$PATH"
    eval "$(pyenv init -)"
    eval "$(pyenv virtualenv-init -)"
  4. Uruchom ponownie powłokę (zamknij i otwórz lub exec $SHELL) lub ponownie załaduj skrypt profilu. (z np. source ~/.bashrc)

Gotowy!

Konfigurowanie środowiska

Aby nie dotykać systemowego Pythona (ogólnie zły pomysł; usługi na poziomie systemu operacyjnego mogą polegać na określonych wersjach bibliotek itp.) Utwórz własne środowisko, to proste! Nawet lepiej, nie sudo, za to lub pipinstaluje!

  1. Zainstaluj preferowaną wersję języka Python (spowoduje to pobranie źródła i kompilację dla użytkownika, nie wymaga wprowadzania danych)

    pyenv install 3.6.0
  2. Zrób to jako virtualenv, aby później móc tworzyć inne

    pyenv virtualenv 3.6.0 general
  3. Uczyń go globalnie aktywnym (dla twojego użytkownika)

    pyenv global general
  4. Rób co chcesz z Pythonem / pipem itp. To jest twoje.

Jeśli chcesz później wyczyścić biblioteki, możesz usunąć virtualenv ( pyenv uninstall general) lub utworzyć nową ( pyenv virtualenv 3.6.0 other_proj). Możesz także mieć środowiska aktywne dla poszczególnych katalogów: pyenv local other_projupuści .python-versionplik do bieżącego folderu i za każdym razem, gdy wywołasz z niego lub pod nim narzędzia Pythona lub pipa, zostaną one zablokowane przez pyenv.

Rozwiązywanie problemów

  • bash: pyenv: command not found, fish: Unknown command 'pyenv'

    1. Sprawdź $PATH, powinien być jeden wpis, który kończy się czymś w rodzaju .pyenv/bin. Jeśli go brakuje, upewnij się, że postępowałeś zgodnie z krokami 3 i 4 (zrestartuj powłokę) w części Zainstaluj pyenv powyżej.
  • pyenv: no such command 'virtualenv'

    1. Jeśli nie użyłeś skryptu instalatora, prawdopodobnie zainstalowałeś tylko główny pakiet pyenv. Zobacz pyenv-virtualenv na instrukcje, aby dodać plugin
    2. Jeśli korzystałeś ze skryptu instalatora, sprawdź, czy wyświetla się z pyenv commands.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.