Tại sao Python 2.7 vẫn là phiên bản Python mặc định trong Ubuntu?


32

Theo tài liệu chính thức của Python, hỗ trợ Python2.7 sẽ kết thúc trong tương lai.

TIỀN GỬI: Python 2.7 sẽ hết tuổi thọ vào ngày 1 tháng 1 năm 2020. Vui lòng nâng cấp Python của bạn vì Python 2.7 sẽ không được duy trì sau ngày đó. Một phiên bản tương lai của pip sẽ bỏ hỗ trợ cho Python 2.7. Thông tin chi tiết về hỗ trợ Python 2 trong pip, có thể được tìm thấy tại https://pip.pypa.io/en/latest/development/release- Process / # python-2-support

Tại sao Ubuntu không sử dụng Python3 làm mặc định trong phiên bản sắp tới của họ?

$ cat /etc/os-release 
NAME="Ubuntu"
VERSION="19.04 (Disco Dingo)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 19.04"
VERSION_ID="19.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=disco
UBUNTU_CODENAME=disco
$ python
Python 2.7.16 (default, Apr  6 2019, 01:42:57) 
[GCC 8.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.

2
Bạn có thể cài đặt gói python3.7. Vấn đề là trong phiên bản ubfox \ linux mint đôi khi vẫn còn các phần mềm cũ, vì vậy bạn phải cài đặt các gói mới hơn bằng tay.
bí ẩn

8
@enigma Không phải là một bản sao của câu hỏi đó vì python3 đã được cài đặt trên hệ thống của mặc định nên anh ta có cả python và python3 được cài đặt cùng nhau.
karel

Câu trả lời:


40

Theo ghi chú phát hành của Bionic Beaver :

Python 2 không còn được cài đặt theo mặc định. Python 3 đã được cập nhật lên 3.6. Đây là bản phát hành LTS cuối cùng bao gồm Python 2 chính.

Và tuyên bố trên là đúng. Python 2 không được cài đặt theo mặc định trong 18.04 và các phiên bản được phát hành sau đó. Ubuntu đã chuyển gần như tất cả các dự án của mình từ Python 2 sang Python 3. Ví dụ, theo ghi chú phát hành của Disco Dingo :

Samba đã được cập nhật lên phiên bản 4.10.x và một trong những thay đổi lớn ở đây là hỗ trợ python3 . Trong vũ trường, samba và các phụ thuộc của nó chỉ là python3, ngoại trừ tdb. tdb vẫn xây dựng gói python2, cụ thể là python-tdb, nhưng tất cả các gói khác, kể cả samba, chỉ là python3.

Hơn nữa, ngay cả trước khi phát hành Ubuntu 18.04, Ubuntu / Canonical đã bắt đầu yêu cầu các nhà phát triển chuyển sang Python 3 vì sự kết thúc đã gần kề . Từ Python - Ubuntu Wiki :

Tất cả sự phát triển theo định hướng Ubuntu / Canonical nên nhắm mục tiêu Python 3 ngay bây giờ và tất cả mã mới chỉ nên là Python 3. Nếu bạn không thể làm điều này vì chồng phụ thuộc của bạn, hãy nói chuyện.

Có vẻ như trên hệ thống của bạn, Python 2 đã được cài đặt có chủ ý hoặc có thể là một phần phụ thuộc của một số gói khác mà nhà phát triển chưa chuyển sang Python 3. Bạn có thể kiểm tra các gói phụ thuộc vào Python 2 bằng cách chạy,

apt rdepends python

Lý do tại sao Python 2 được gọi khi pythonđược chạy nằm ở một trong những điểm lịch sử của PEP 394 - Lệnh "python" trên các hệ thống giống như Unix :

Các pythonlệnh nên luôn luôn invoke Python 2 (để ngăn chặn khó chẩn đoán lỗi khi Python 2 đang chạy trên Python 3).


12
Để làm rõ điểm cuối cùng, Python 3 không tương thích ngược với Python 2. Điều đó và kết hợp với thực tế là Python 2 có nhiều hỗ trợ thư viện hơn Python 3, có nghĩa là một số lượng lớn các nhà phát triển vẫn có sự phụ thuộc trực tiếp vào Python 2. Python 3 đã ra mắt được một thời gian, nhưng thực sự đó là các thư viện là lý do khiến Python 2 vẫn được sử dụng mạnh mẽ, mặc dù nó thậm chí không còn được hỗ trợ nữa (nếu tôi nhớ chính xác, hỗ trợ chính thức đã kết thúc 2018). EDIT: hỗ trợ chính thức kết thúc vào năm 2020.
searchengine27

8
"... thực tế là Python 2 có nhiều hỗ trợ thư viện hơn Python 3 ..." - Bạn có nguồn nào cho việc đó không? Tôi hiếm khi gặp các thư viện nữa mà không hỗ trợ Python 3 và trên thực tế, một số đang bỏ hỗ trợ cho Python 2! (Ví dụ: Django, một khung web Python phổ biến, đã không hỗ trợ Python 2 cho ba bản phát hành .) Tuyên bố của bạn có ý nghĩa cách đây năm năm, nhưng hôm nay tôi không nghĩ bạn có thể tạo ra sự khái quát sâu rộng mà không cần sao lưu bằng thống kê .
marcelm

7
@ searchengine27 Tôi không nghĩ rằng các yếu tố hỗ trợ thư viện vào nó. Mối quan tâm tương thích ngược là thế giới tràn ngập các tập lệnh ngẫu nhiên bắt đầu bằng #!/usr/bin/pythonhoặc tương đương, sẽ bị phá vỡ nếu pythontrở thành python3, trong khi các tập lệnh ngẫu nhiên phụ thuộc vào Python 3 có nhiều khả năng bắt đầu hơn #!/usr/bin/python3.
James_pic

1
@ searchengine27 Một thời gian dài trước đây, một người nào đó đã tạo ra một trang web "Bức tường xấu hổ Python3" liệt kê các phụ thuộc phổ biến nhất và trạng thái python3 của họ (lúc đó là rất nhiều). Tuy nhiên, đã nhiều năm rồi nó mới được đổi thành Tường siêu năng lực Python 3 vì thực tế tất cả các phụ thuộc phổ biến đã được di chuyển và một số ít không di chuyển đã chết (dù sao trang web đã được cập nhật kể từ tháng 4 năm 2018 kể từ bây giờ về cơ bản mọi thứ là python3-có thể).
Giacomo Alzetta

4
Cũng giống như một sự bổ sung: thực tế là Quỹ phần mềm Python sẽ ngừng duy trì Python 2 vào năm 2020 không có nghĩa là Canonical sẽ ngừng duy trì Python 2 vào năm 2020. Trên thực tế, toàn bộ quan điểm sử dụng bản phân phối Linux từ một nhà cung cấp có uy tín là tất cả các gói trong bản phân phối (đối với Debian / Ubuntu có nghĩa là kho lưu trữ "chính") sẽ được duy trì trong toàn bộ thời gian phát hành bản phân phối bất kể trạng thái hỗ trợ của gói ngược dòng ban đầu. Nói cách khác, gói Python 2 trong Ubuntu 19.04 sẽ được duy trì miễn là Ubuntu 19.04.
Jörg W Mittag

0

Theo hiểu biết của tôi, chỉ có linux linux đã làm điều đó: gọi python3từ pythonlệnh mặc định . Mặc dù khuyến nghị PEP 394 .

Nó có thể được thay đổi trong /usr/binbằng cách xác định lại mối liên hệ giữa python, pythonXpythonX.Y. Nhưng hãy chuẩn bị để đối phó với rất nhiều lỗi, vì tất cả các tập lệnh python2 của bạn sẽ bắt buộc phải có một shell bang rõ ràng:

#!/usr/bin/env python2

Một tiếng nổ vỏ hiếm khi được sử dụng trong các tập lệnh cũ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.