Bagaimana cara saya menginstal Python 2.7.X atau 3.X terbaru di Ubuntu?

183

Saya ingin menginstal tarball Python terbaru di Ubuntu, diunduh dari http://python.org/download/ .

Apakah ini cara yang benar untuk menginstal?

./configure
make
make install

Jika tidak, bagaimana saya melakukannya?

mohammad
sumber
1
Pada suatu waktu, saya membayangkan ini diminta untuk menginstal versi python yang lebih baru di Ubuntu. Sekarang, diperlukan untuk menginstal versi python yang lebih lama di Ubuntu (karena kita masih memerlukan python 2.7 untuk banyak hal) ... tl; dr: jawaban ini tidak lagi terkini / benar. Alih-alih, dengan asumsi python3 diinstal secara default (dan mungkin python2.x minimal), kemudian jalankan:sudo apt-get install python-2.7 python-pip
michael
@michael_n apa yang kamu bicarakan? kompilasi dari sumber tidak membuat jawaban ini salah atau ketinggalan zaman. itu hanya metode yang berbeda. Anda dapat menggunakan apt untuk mengotomatiskan proses untuk Anda jika diperlukan.
kamu menggunakan apa yang kamu butuhkan. Saya benar-benar tidak melihat bagaimana ini mendukung klaim Anda bahwa ini sudah ketinggalan zaman. seperti yang Anda katakan sendiri, Anda menggunakannya ketika Anda perlu karena mungkin tidak tersedia. Sebagai contoh, subsistem windows untuk linux menggunakan beberapa paket perangkat lunak tanggal bahkan distro adalah ubuntu 16.04.1 (beta) dan menggunakan python2.6.2, dan python3 bahkan saat ini adalah python2.7.12. Dalam hal ini, saya harus mengkompilasi jika saya ingin paket terbaru
1
@ jargonjunkie Anda di luar topik, tetapi benar. Jika pertanyaannya adalah "bagaimana cara menginstal python 2.7 di ubuntu 16.04+" yang mana (karena 16.04 sekarang tersedia, yang merupakan poin saya), maka Anda cukup sudo apt-get install python2.7. Ini bukan hanya lebih mudah, itu satu-satunya jawaban yang benar, karena itu satu-satunya cara Anda akan dapat menangani menginstal modul python melalui apt-get dan dependensinya pada gilirannya.
michael
Semoga ini bisa membantu menggambarkan (menambahkan jawaban). ekosistem python sangat khusus / rewel, dan Anda dapat dengan mudah masuk ke "neraka ketergantungan" jika Anda tidak hati-hati membangun lingkungan python Anda askubuntu.com/a/831075/17060
michael

Jawaban:

199

Pertama, instal beberapa dependensi:

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

Kemudian unduh menggunakan perintah berikut:

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

Ekstrak dan buka direktori:

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

Sekarang, instal menggunakan perintah yang baru saja Anda coba, gunakan checkinstalluntuk membuatnya lebih mudah untuk dihapus jika diperlukan:

./configure
make
sudo checkinstall

Ubah versionke versi mana pun yang Anda butuhkan ( version=2.7.1atau version=3.6.0, misalnya).

Achu
sumber
20
Gunakan sudo make installdan jangan altinstallsetel sebagai versi python default
Shagun Sodhani
gunakan CXX=g++ ./configurejika ./configure mengeluarkan peringatan yang mengatakan g ++ tidak ditemukan
srj
2
setelah menginstal seperti yang diinstruksikan di atas, perintah apa yang harus saya jalankan di konsol untuk memeriksa apakah memang sudah diinstal?
J86
9
Sangat luar biasa bahwa jawaban terbaik untuk pertanyaan sederhana "bagaimana menginstal Python" akan membawa peringatan yang sangat mengerikan, seperti "ini adalah cara terbaik yang kami tahu untuk menginstal Python dan mungkin sangat merusak sistem Anda" ... Itu juga sangat mengejutkan bahwa situs web resmi Python memiliki banyak unduhan dan tidak satu halaman pun petunjuk pemasangan.
patb
4
pat - jawaban terbaik untuk pertanyaan sederhana "bagaimana menginstal python" adalah sudo apt-get install python, jawaban yang lebih rumit adalah "bagaimana menginstal python terbaru ", implikasinya adalah "dari sumber". Anda akan memiliki masalah yang sama pada OS apa pun kecuali Anda menginstal binari yang telah dikompilasi dari pihak ke-3, yang, sekali lagi, berisiko pada OS apa pun (dan sangat bervariasi di berbagai OS). Juga jawaban ini dari 2012; untuk saran terbaru, lihat askubuntu.com/questions/101591/…
michael
181

Kecuali jika Anda benar-benar memiliki keinginan untuk mengkompilasinya sendiri, cara yang disukai adalah menggunakan DeadSnakes PPA untuk menginstal versi Python yang tidak disertakan secara default:

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

Versi lain, seperti python2.4atau python3.6, dll. Juga tersedia.

brousch
sumber
13
Catatan program: Jika Anda menggunakan 10,04, Anda mungkin perlu menginstal properti python-software-sebelum menggunakan add-apt-repository.
Craig Maloney
3
Disarankan untuk membuat python di lingkungan lokal Anda, daripada menginstalnya dari binari pra-bangun
pylover
16
+1 :)really have a burning desire to compile it yourself
Watt
5
Ketinggalan menyebutkan: 1. ppatidak secara resmi disetujui, jadi cara paling aman adalah membangun dari sumber. 2. ini akan menghasilkan python global, yang non- sudoers tidak dapat memodifikasi atau menginstal paket, bukan yang lokal. 3. Beberapa ular sanca dapat diinstal secara lokal di lokasi yang berbeda dengan membangun dari sumber.
Ioannis Filippidis
2
apt-get install python2.7Ini menginstal biner python2.7 bukannya python ... jelek !!
Dhawal
26

Melanjutkan mendokumentasikan ini untuk rilis Ubuntu terbaru 1 : untuk server Ubuntu 16.04.1, Python default adalah versi 3.5, dan Python 2.7 tidak diinstal secara default. Pada pemasangan baru (perhatikan bahwa tidak ada yang pythondapat dieksekusi):

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

Catatan: sebelum melanjutkan, Anda mungkin ingin melakukan yang cepat sudo apt-get update,, sudo apt-get upgradedan sudo apt-get dist-upgrade(harap dicatat dengan tepat apa yang sebenarnya dilakukan perintah-perintah ini; Saya mengasumsikan instalasi baru di sini.)

Memasang python 2.7 semudah:

$ sudo apt-get install python2.7

Output awal menginstal python 2.7 adalah sebagai berikut:

$ 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...

Setelah menginstal python 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

Tetapi masih ada masalah, karena Anda belum dapat menginstal modul PyPI melalui pip- misalnya, jika Anda ingin notebook jupyter, atau scipy atau numpy terbaru (dll), Anda ingin menginstal pipdan kemudian pip installitu, dan masih beralih ke apt-getuntuk menginstal semua dependensi sistem yang diperlukan , seperti graphviz atau pustaka sistem inti.

$ 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

Jadi untuk menginstal pip, sekali lagi, semudah 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

Anda membutuhkan keduanya python-pipuntuk Python 2.7 pipdan python3-pipuntuk Python 3 pip. Instalasi via apt-getyakin untuk menginstal dependensi yang diperlukan; misal, ini output untuk menginstal 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...

Hal yang menarik terjadi sebagai akibat dari ini: Anda sekarang memiliki "standar" (dan direkomendasikan PEP) python2dan python3(yang hanya symlink ke python 2.7 dan python 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

Anda juga ingin sudo apt-get install python3-pip; sebelum Anda menginstal, Anda harus:

$ 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

Setelah menginstal 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...

Versi yang dihasilkan:

$ 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)

Dan satu hal terakhir sebelum Anda dapat pergi dan mulai menginstal semua python python modul favorit Anda: Anda mungkin harus meng-upgrade pip itu sendiri (baik pip2 dan pip3, secara terpisah; juga, tidak masalah jika pipdipanggil melalui pythonexecutables atau pipdapat dieksekusi, pemutakhiran aktual disimpan di /usr/lib):

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

Anda sekarang dapat menjalankan versi yang berdiri sendiri pipatau yang dibundel dalam python(via python -m pip {command}).


[1] Rekap historis: Ubuntu yang lebih lama hanya memiliki Python 2.6, dengan demikian semua berbagai metode untuk menginstal Python 2.7+. Kemudian, setelah Python 2.7 ditambahkan ke repositori publik, kami masih memiliki tantangan yang sama untuk menginstal Python 2.7 terbaru dengan perbaikan terbaru, yang (terlalu) sering diperlukan. Situasi hari ini jauh lebih baik / sederhana: Python 2.7 & 3.5 saat ini (pada dasarnya hanya dua versi platform Python yang orang pedulikan) yang sekarang ada di repo publik sangat stabil, jadi sekarang kita benar-benar hanya perlu khawatir tentang menginstal yang terbaru modul python , bukan python terbaru . Jadi sekarang Python "masalah versi terbaru" telah berpindah sebagian dari repo OS & aptdan ke PyPI & pip.)

michael
sumber
2
Mengikuti instruksi ini di Ubuntu 16.04.1 LTS berhasil men-setup python 2.7 dan pip seperti ini: sudo apt-get install python2.7; sudo apt-get install python-pip; sudo -H python2 -m pip install --upgrade pip; # Memeriksa versi: $ pip --version -> pip 9.0.1 dari /usr/local/lib/python2.7/dist-packages (python 2.7); $ python --version -> Python 2.7.12
Robert Lujo
Maafkan ketidaktahuan saya tapi bolehkah saya tahu apa artinya "hash" ketika menampilkan versi Python?
Failed Scientist
1
@TalhaIrfan Ini pertanyaan yang bagus (dan, jika Anda akan mengizinkan jawaban yang disederhanakan): ketika sebuah perintah diketik dalam bash (sebagai w / kebanyakan shell), cmd bisa berupa alias, fungsi, atau file yang dapat dieksekusi yang ditemukan di $PATH. Env var PATHadalah daftar panjang direktori dengan ribuan file di dalamnya. Untuk mempercepat menemukan executable, shell menggunakan hashtable cache untuk pencarian cepat. Itu bisa menjadi basi, jadi "hash" membuat Anda tahu bahwa itu "diingat" perintah ini dipetakan ke file yang dapat dieksekusi itu unix.stackexchange.com/questions/5609/…
michael
@ Michael Terima kasih banyak! Ini jawaban yang sangat berguna: Singkat dan to-the-point!
Failed Scientist
1
@gaia Anda mungkin ingin mengajukan pertanyaan terpisah, karena lebih banyak bolak-balik mungkin diperlukan untuk mengetahuinya (atau jika ada yang berubah sejak saya menulis ini). Mungkin, pertama-tama pastikan bahwa keduanya pip (2.7) & pip3(3.x) telah sepenuhnya diinstal / ditingkatkan, dan bukan hanya yang pertama - yaitu, sudo apt-get install python-pip python3-pipdan sudo -H python2 -m pip install --upgrade pipdan sudo -H python3 -m pip install --upgrade pip ... Atau jika itu benar-benar merupakan masalah izin (ditunjukkan oleh "berfungsi dengan" sudo "), maka akan sedikit lebih sulit untuk dilacak.
michael
11

12,04

Jika Anda mengikuti jawaban Achu , maka istilah tersebut libread5-devharus diubah menjadi libreadline-gplv2-dev. Jadi perintah lengkapnya adalah:

sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev
Orang itu
sumber
4

Anda juga dapat mengunduh dan menginstalnya melalui 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
Berbisik
sumber
Ini adalah cara terbersih untuk mendapatkan versi Python yang benar-benar terkini di Ubuntu versi yang lebih lama. Ini termasuk dukungan virtualenv juga, melalui pyenv-virtualenvplugin, membuatnya mudah untuk menginstal aplikasi dengan berbagai persyaratan modul tanpa bentrokan.
RichVel
2
Dua peringatan tentang pyenv: (1) ini hanya bekerja dari bash shell (atau mungkin zsh, tetapi tentu saja tidak mem-dash yang / bin / sh di Ubuntu), dan (2) memerlukan shell login (mis. bash --login), Yang tidak selalu mudah dicapai misalnya dari Ansible. Terbaik untuk penggunaan interaktif, kurang baik untuk server skrip.
RichVel
0

Sebagian besar cermin dari jawaban ini dengan intro tweak

Saya akan merekomendasikan pyenv . Ini mengotomatiskan proses build selain dari menginstal dependensi header (lihat di bawah). Anda dapat membangun dan menginstal versi Python baru (atau lama) hanya dengan mengatakan pyenv install 3.6.0. Semuanya berjalan sebagai pengguna Anda, jadi Anda tidak perlu khawatir mengacaukan Python yang digunakan oleh Ubuntu itu sendiri.

Berbeda dengan beberapa opsi berbasis apt-repo (misalnya deadsnakes), umumnya akan bekerja pada hari yang sama setelah rilis pyenv updatekarena Anda tidak perlu menunggu orang lain untuk mengemasnya. Lihat semua versi yang dapat Anda instalpyenv install --list

Instal pyenv

  1. Instal alat dan tajuk yang diperlukan untuk membuat CPythons (Python eksotis seperti PyPy atau Jython mungkin memiliki dependensi lain). Git digunakan oleh pyenv, plus itu juga memungkinkan build / install cabang sumber, sehingga Anda dapat menginstal apa pun yang 3.8 sekarang, yaitu cabang master dari CPython yang baru lepas dari 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. Jalankan skrip penginstal (instal pyenv dan beberapa plugin pyenv yang sangat berguna oleh penulis asli; lihat di sini untuk informasi lebih lanjut)

    curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
  3. Tambahkan baris init ke ~/.profileatau Anda ~/.bashrc(menyebutkannya di akhir skrip instal):

    export PATH="~/.pyenv/bin:$PATH"
    eval "$(pyenv init -)"
    eval "$(pyenv virtualenv-init -)"
    
  4. Mulai ulang shell Anda (tutup & buka atau exec $SHELL) atau muat ulang skrip profil. (dengan misalnya source ~/.bashrc)

Selesai!

Menyiapkan lingkungan

Untuk tidak menyentuh sistem Python (umumnya ide yang buruk; layanan tingkat OS mungkin mengandalkan beberapa versi perpustakaan tertentu, dll.) Buat lingkungan Anda sendiri, mudah! Bahkan lebih baik, tidak sudo, untuk itu atau pipmenginstal!

  1. Instal versi Python pilihan Anda (ini akan mengunduh sumber dan membangunnya untuk pengguna Anda, tidak perlu input)

    pyenv install 3.6.0
  2. Jadikan virtualenv sehingga Anda bisa membuat orang lain nanti jika mau

    pyenv virtualenv 3.6.0 general
  3. Jadikan global aktif (untuk pengguna Anda)

    pyenv global general
  4. Lakukan apa yang Anda inginkan dengan Python / pip, dll. Ini milik Anda.

Jika Anda ingin membersihkan perpustakaan Anda nanti, Anda bisa menghapus virtualenv ( pyenv uninstall general) atau membuat yang baru ( pyenv virtualenv 3.6.0 other_proj). Anda juga dapat memiliki lingkungan yang aktif per-direktori: pyenv local other_projakan menjatuhkan .python-versionfile ke folder Anda saat ini dan setiap kali Anda memanggil Python atau utilitas Python yang dipasang dari situ atau di bawahnya, mereka akan digerogoti oleh pyenv.

Penyelesaian masalah

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

    1. Periksa Anda $PATH, harus ada satu entri yang berakhir dengan sesuatu seperti .pyenv/bin. Jika tidak ada pastikan Anda mengikuti # 3 DAN # 4 (restart shell Anda) di bawah Instal pyenv di atas.
  • pyenv: no such command 'virtualenv'

    1. Jika Anda tidak menggunakan skrip penginstal, Anda kemungkinan hanya menginstal paket root pyenv. Lihat pyenv-virtualenv untuk instruksi menambahkan plugin
    2. Jika Anda menggunakan skrip penginstal, periksa apakah skripnya muncul pyenv commands.
Nick T
sumber