Câu hỏi Làm cách nào để cài đặt Python 2.7.X hoặc 3.X mới nhất trên Ubuntu?


Tôi muốn cài đặt tarball Python mới nhất trên Ubuntu, được tải xuống từ http://python.org/download/.

Đây có phải là cách cài đặt đúng không?

./configure
make
make install

Nếu không, làm thế nào để làm điều đó?


157
2018-02-05 12:02


gốc


Tại một thời điểm, tôi tưởng tượng điều này đã được yêu cầu để cài đặt mới hơn phiên bản của python trên Ubuntu. Bây giờ, cần phải cài đặt lớn hơn  phiên bản python trên Ubuntu (vì chúng tôi vẫn yêu cầu python 2.7 cho rất nhiều thứ) ... tl; dr: câu trả lời này không còn hiện tại / đúng nữa. Thay vào đó, giả sử python3 được cài đặt theo mặc định (và có lẽ là python2.x tối thiểu), sau đó chạy: sudo apt-get install python-2.7 python-pip - michael
@michael_n bạn đang nói về cái gì vậy? biên dịch từ nguồn không làm cho câu trả lời này không chính xác hoặc lỗi thời. nó chỉ là một phương pháp khác. bạn có thể sử dụng apt để tự động hóa quy trình cho bạn nếu cần. - jargonjunkie
u sử dụng những gì bạn cần. Tôi không thực sự thấy cách này hỗ trợ yêu cầu của bạn về điều này là lỗi thời. như bạn đã nói, bạn sử dụng nó khi bạn cần vì nó có thể không có sẵn. Ví dụ, hệ thống con cửa sổ cho Linux sử dụng một số gói phần mềm ngày thậm chí tho distro là ubuntu 16.04.1 (beta) và sử dụng python2.6.2, và python3 thậm chí tho hiện tại là python2.7.12. Trong trường hợp thay thế, tôi nên compil nếu tôi muốn up-to-date gói - jargonjunkie
@jargonjunkie bạn không có chủ đề, nhưng chính xác. Nếu câu hỏi là "Làm thế nào để cài đặt python 2.7 trên ubuntu 16.04+" nó là (kể từ 16.04 bây giờ đã có, đó là quan điểm của tôi), sau đó bạn chỉ đơn giản là sudo apt-get install python2.7. Điều này không chỉ dễ dàng hơn, đó là câu trả lời đúng duy nhất, vì đó là cách duy nhất bạn có thể xử lý việc cài đặt các mô đun python thông qua apt-get và các phụ thuộc của chúng lần lượt. - michael
hy vọng điều này sẽ giúp minh họa (thêm câu trả lời). hệ sinh thái python rất đặc biệt / khó tính và bạn có thể dễ dàng xâm nhập vào "địa ngục phụ thuộc" nếu bạn không cẩn thận xây dựng môi trường python của mình askubuntu.com/a/831075/17060 - michael


Các câu trả lời:


Đầu tiên, cài đặt một số phụ thuộc:

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

Sau đó tải xuống bằng lệnh sau:

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

Giải nén và đi đến thư mục:

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

Bây giờ, hãy cài đặt bằng lệnh bạn vừa thử, sử dụng checkinstall thay vào đó để dễ dàng gỡ cài đặt hơn nếu cần:

./configure
make
sudo checkinstall

Thay đổi version cho bất kỳ phiên bản nào bạn cần (version=2.7.1 hoặc là version=3.6.0, ví dụ).


184
2018-02-05 12:20



Sử dụng sudo make install và không altinstall để đặt nó làm phiên bản python mặc định - Shagun Sodhani
sử dụng CXX=g++ ./configure nếu ./configure đưa ra cảnh báo nói rằng g ++ không được tìm thấy - srj
sau khi cài đặt theo hướng dẫn ở trên, những lệnh nào tôi chạy trong giao diện điều khiển để kiểm tra xem thực sự nó đã được cài đặt chưa? - Ciwan
Nó khá phi thường là câu trả lời tốt nhất cho câu hỏi đơn giản "cách cài đặt Python" sẽ mang đến cảnh báo khủng khiếp như vậy, nó giống như "cách tốt nhất để cài đặt Python và nó có thể phá vỡ hệ thống của bạn" ... rất đáng ngạc nhiên khi trang web Python chính thức có rất nhiều lượt tải xuống và không phải là một trang hướng dẫn cài đặt. - patb
pat - câu trả lời hay nhất cho câu hỏi đơn giản "cách cài đặt python" là sudo apt-get install python, câu trả lời phức tạp hơn là "cách cài đặt muộn nhất Bạn sẽ có cùng một vấn đề trên bất kỳ hệ điều hành nào trừ khi bạn cài đặt các tập tin nhị phân được biên dịch trước từ bên thứ 3, một lần nữa, rủi ro trên bất kỳ hệ điều hành nào (và khác nhau rất nhiều trên các hệ điều hành khác nhau) Ngoài ra câu trả lời này là từ năm 2012, để được tư vấn gần đây, hãy xem askubuntu.com/questions/101591/… - michael


Trừ khi bạn thực sự có một mong muốn cháy để biên dịch nó cho mình, cách ưu tiên là sử dụng DeadSnakes PPA để cài đặt các phiên bản của Python không được bao gồm theo mặc định:

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

Các phiên bản khác, chẳng hạn như python2.4 hoặc là python3.6, vv cũng có sẵn.


159
2018-02-05 14:40



Ghi chú chương trình: Nếu bạn đang ở trên 10.04, bạn có thể cần cài đặt phần mềm python-software trước khi sử dụng add-apt-repository. - Craig Maloney
Bạn nên xây dựng python trong môi trường cục bộ của mình, thay vì cài đặt nó từ các tệp nhị phân dựng sẵn - pylover
+1 :) really have a burning desire to compile it yourself - Watt
Thiếu đề cập đến rằng: 1. the ppa không được chính thức xác nhận, vì vậy cách an toàn nhất là xây dựng từ nguồn. 2. điều này sẽ dẫn đến một con trăn toàn cầu, mà khôngsudoers không thể sửa đổi hoặc cài đặt các gói, không phải gói cục bộ. 3. Nhiều pythons có thể được cài đặt cục bộ tại các vị trí khác nhau bằng cách xây dựng từ nguồn. - Ioannis Filippidis
apt-get install python2.7Điều này cài đặt nhị phân python2.7 thay vì python ... xấu xí !! - Dhawal


Tiếp tục viết tài liệu này cho các bản phát hành Ubuntu mới nhất1 : đối với máy chủ Ubuntu 16.04.1, Python mặc định là phiên bản 3.5 và Python 2.7 là không phải được cài đặt theo mặc định. Khi cài đặt mới (lưu ý rằng thậm chí không có python thực thi):

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

Lưu ý: trước khi tiếp tục, có thể bạn sẽ muốn thực hiện nhanh chóng sudo apt-get update, sudo apt-get upgradesudo apt-get dist-upgrade (xin lưu ý chính xác những lệnh này đang thực sự làm gì; Tôi giả sử cài đặt mới ở đây.)

Cài đặt python 2.7 dễ dàng như:

$ sudo apt-get install python2.7

Đầu ra ban đầu của việc cài đặt python 2.7 như sau:

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

Sau khi cài đặt 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

Nhưng vẫn còn một vấn đề, vì bạn chưa thể cài đặt các mô-đun PyPI qua pip - ví dụ: nếu bạn muốn sổ ghi chép jupyter, hoặc sổ ghi chép mới nhất hoặc sổ ghi chép (v.v ...), bạn sẽ muốn cài đặt pip và sau đó pip install những người đó, và vẫn chuyển sang apt-get để cài đặt bất kỳ cần thiết nào hệ thống phụ thuộc, như graphviz hoặc thư viện hệ thống cốt lõi.

$ 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

Vì vậy, để cài đặt pip, một lần nữa, nó dễ dàng như 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ạn sẽ cần cả hai python-pip cho Python 2.7 pip và python3-pip cho Python 3 pip. Cài đặt qua apt-get chắc chắn sẽ cài đặt các phụ thuộc bắt buộc; ví dụ: đây là đầu ra để cài đặt 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...

Một điều thú vị xảy ra là kết quả của việc này: bây giờ bạn có "tiêu chuẩn" (và khuyến nghị PEP) python2 và python3 (chỉ là các liên kết tới python 2.7 và 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

Bạn cũng sẽ muốn sudo apt-get install python3-pip; trước khi cài đặt, bạn có:

$ 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

Sau khi cài đặt 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...

Các phiên bản kết quả:

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

Và một điều cuối cùng trước khi bạn có thể bắt đầu cài đặt tất cả các mô-đun PyPI python ưa thích của mình: có thể bạn sẽ phải nâng cấp pip (cả pip2 và pip3, riêng biệt), cũng không sao cả pip được gọi thông qua python thực thi hoặc pip thực thi, các nâng cấp thực tế được lưu trữ trong /usr/lib):

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

Bây giờ bạn có thể chạy độc lập pip hoặc phiên bản đi kèm trong python (thông qua python -m pip {command}).


[1] Tóm tắt lịch sử: Ubuntu cũ hơn chỉ có Python 2.6, do đó tất cả các phương thức khác nhau để cài đặt Python 2.7+. Sau đó, sau khi Python 2.7 được thêm vào kho công cộng, chúng tôi vẫn có cùng một thách thức để cài đặt Python 2.7 mới nhất với các bản sửa lỗi mới nhất, đó là (quá) thường xuyên cần thiết. Tình hình ngày hôm nay tốt hơn / đơn giản hơn nhiều: Python 2.7 & 3.5 hiện tại (về cơ bản chỉ có hai phiên bản nền tảng Python mà mọi người quan tâm) hiện đang trong repos công cộng rất ổn định, vì vậy bây giờ chúng ta chỉ phải lo lắng về việc cài đặt phiên bản mới nhất con trăn mô-đun, không phải là mới nhất con trăn. Vì vậy, bây giờ Python "vấn đề phiên bản mới nhất" đã di chuyển từng phần ra khỏi repos hệ điều hành & apt và vào PyPI & pip.)


24
2017-09-29 08:50



Làm theo hướng dẫn này trên Ubuntu 16.04.1 LTS thiết lập thành công python 2.7 và pip như sau: sudo apt-get install python2.7; sudo apt-get cài đặt python-pip; sudo -H python2 -m pip cài đặt - upgrade pip; # Kiểm tra phiên bản: $ pip --version -> pip 9.0.1 từ /usr/local/lib/python2.7/dist-packages (python 2.7); $ python --version -> Python 2.7.12 - Robert Lujo
Câu trả lời thực sự hữu ích - cảm ơn rất nhiều! - Failed Scientist
Tha thứ sự thiếu hiểu biết của tôi nhưng tôi có thể biết những gì "băm" có nghĩa là khi hiển thị các phiên bản Python? - Failed Scientist
@TalhaIrfan Đó là một câu hỏi hay (và nếu bạn cho phép một câu trả lời đơn giản): khi một lệnh được gõ vào bash (như w / hầu hết các shell), cmd có thể là một bí danh, hàm, hoặc tệp thực thi được tìm thấy trong $PATH. Env var PATH là một danh sách dài các thư mục với hàng nghìn tệp trong đó. Để tăng tốc độ tìm kiếm tệp thực thi, trình bao sử dụng thẻ bắt đầu bằng # có thể lưu trong bộ nhớ cache để tra cứu nhanh. Nó có thể trở thành cũ, vì vậy "băm" cho bạn biết rằng nó "nhớ" lệnh này ánh xạ tới tập tin thực thi đó unix.stackexchange.com/questions/5609/… - michael
@gaia bạn có thể muốn hỏi một câu hỏi riêng biệt, vì có thể phải trả lại nhiều hơn nữa để tìm ra (hoặc nếu có bất cứ điều gì đã thay đổi kể từ khi tôi viết bài này). Có lẽ, trước tiên hãy xác minh rằng cả hai  pip (2.7) & pip3 (3.x) đã được cài đặt / nâng cấp hoàn toàn và không chỉ là cũ - tức là, sudo apt-get install python-pip python3-pip và sudo -H python2 -m pip install --upgrade pip và sudo -H python3 -m pip install --upgrade pip  ... Hoặc nếu nó thực sự là một vấn đề cho phép (được chỉ ra bởi "nó hoạt động với sudo"), sau đó nó sẽ có một chút khó khăn hơn để theo dõi. - michael


12.04

Nếu bạn đang theo dõi Câu trả lời của Achu, sau đó là thuật ngữ libread5-dev nên được thay đổi thành libreadline-gplv2-dev. Vì vậy, lệnh đầy đủ sẽ là:

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

11
2017-07-26 14:37





Bạn cũng có thể tải xuống và cài đặt nó qua 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

2
2018-03-30 07:38



Đây là cách sạch nhất để có được phiên bản Python thực sự cập nhật trên phiên bản Ubuntu cũ hơn. Nó cũng bao gồm hỗ trợ virtualenv, thông qua pyenv-virtualenv plugin, làm cho nó dễ dàng để cài đặt các ứng dụng với các yêu cầu module khác nhau mà không có xung đột. - RichVel
Hai cảnh báo về pyenv: (1) nó chỉ hoạt động từ một bash shell (hoặc có thể zsh, nhưng chắc chắn không phải dash là / bin / sh trên Ubuntu), và (2) nó đòi hỏi một shell đăng nhập (ví dụ: bash --login), không phải lúc nào cũng dễ đạt được, ví dụ: từ Ansible. Tốt nhất cho sử dụng tương tác, ít tốt cho các máy chủ tập lệnh. - RichVel