Tại sao python 3 không phải là nhị phân python mặc định?


42

Tôi gõ pythonvào một cửa sổ đầu cuối. Tôi nhận được Python 2.7 chứ không phải Python 3.5. Theo các tài liệu, Python 3.5 nên được tải sẵn.


1
Nếu bạn thiết lập môi trường ảo bằng cách sử dụng: "python3 -m venv my-venv", thì từ bất kỳ thiết bị đầu cuối nào cũng kích hoạt môi trường ảo đó bằng cách gọi "nguồn ... / my-env / bin / activ", thì python 3.5 sẽ là mặc định trong thiết bị đầu cuối đó. Bạn có thể kiểm tra phiên bản mặc định hiện tại bằng cách gọi "python -V".
Craig Hicks

Trong khi câu trả lời của bạn là hữu ích, tôi hỏi tại sao. không làm sao và, đó là cuộc tranh luận lớn. đây. Tại sao một phiên bản cũ hơn theo mặc định, thay vì phiên bản hiện tại.
givonz

1
Bạn hoàn toàn chính xác về "bình luận" của tôi! Đó là lý do tại sao tôi viết một bình luận và không trả lời.
Craig Hicks

Câu trả lời:


56

Tôi không biết "tài liệu" bạn đang đọc cũng như những gì họ nói, nhưng /usr/bin/pythonđây chỉ là một liên kết tượng trưng cho phiên bản mặc định của python, trong trường hợp 2.7 này, là kết quả của việc chỉ cần gõ pythontrên thiết bị đầu cuối. Đây là kết quả của PEP 394 , định nghĩa rằng

  • trong thời điểm hiện tại, tất cả các bản phân phối phải đảm bảo pythonđề cập đến cùng một mục tiêu nhưpython2 .

type pythonfile /usr/bin/pythonsẽ xác nhận điều này.

Lý do cho sự sắp xếp này ngoài quy ước, là gói mặc định python mặc định trong Xenial là phiên bản 2.7.11 , vì vậy liên kết tượng trưng của python trỏ đến phiên bản này.

Để sử dụng python 3, bạn phải rõ ràng và nhập python3dòng lệnh, được khuyến nghị trong trường hợp bạn cần một phiên bản cụ thể, điều này cũng có thể được thực hiện với python 2, gõ python2. Ubuntu bao gồm cả hai phiên bản python 2 và 3 theo mặc định trên tất cả các phiên bản hiện tại.

kế hoạch di chuyển mọi thứ sang python 3 và đánh dấu nó là mặc định.


Điều này có thể phá vỡ plugin nhịp điệu-zeitgeist phụ thuộc vào zeitgeiigeist-python3 nhưng không thể tìm thấy nó.
Khurshid Alam

2
Đây là tài liệu mà OP có nghĩa.
SaidbakR

10

Để lấy Python 3.5 REPL hoặc chạy tập lệnh tương thích, hãy nhập python3. Điều này là để duy trì khả năng tương thích với tất cả các python 2.x cũ (đã luôn luôn và sẽ vẫn được liên kết với python).

Dấu gạch ngang có thể tìm thấy pythonnếu bạn thiết lập một .desktoptệp cho nó (in ~/.local/share/applications/), để mở một thiết bị đầu cuối và khởi động REPL chẳng hạn. Không có môi trường REPL mặc định cho python và mong muốn giao diện bình thường là người dùng sẽ đi đến thiết bị đầu cuối.

Cuộc trò chuyện của python 3.5 được mặc định là các nhà bảo trì chuyển tất cả các tập lệnh hệ thống từ python 2.x sang python 3.x, không phải python 3 sẽ thay thế python 2 trong mọi trường hợp.


Vì vậy, tôi đoán câu hỏi chính xác là, làm thế nào để tôi thêm python3 vào đường dẫn của mình, để nó tự động thực thi?
givonz

Ý bạn là, làm thế nào để bạn có được các kịch bản python để thực thi như một chương trình được biên dịch?
Andrew Keech

cảm ơn chỉ cần gõ python3 tại dấu nhắc lệnh.
givonz

2
AIUI phải làm gì với / usr / bin / python trong dài hạn vẫn là một câu hỏi mở. Cách thực hành tốt nhất cho các kịch bản python2 là sử dụng python2 một cách rõ ràng.
Peter Green

1
thay vì sử dụng #!/usr/bin/python3(hoặc #!/usr/bin/python2) trong các tập lệnh, tốt hơn là sử dụng (chỉ dành cho python, cụ thể) #!/usr/bin/env python3nếu bạn muốn nó có thể di động từ xa. Đối với hầu hết các phần, đây chỉ là tài liệu, vì trong nhiều trường hợp, nó sẽ được gọi bằng cách sử dụng $ python3 your_pyprogram.py.
michael

4

Bạn cho rằng Python mặc định sẽ có sẵn dưới dạng python. Giả định đó là sai.

Trên một hệ thống đi kèm với Python 3 đã được tải sẵn và không có Python 2, sẽ chỉ có python3và không có python.

Mã được viết cho Python 3 phải luôn tìm kiếm một trình thông dịch được gọi python3. Mã được viết cho Python 2 trong lịch sử sẽ tìm kiếm python.

Có thể đến một thời điểm, có thể là nhiều thập kỷ kể từ bây giờ, nơi hầu như không ai nhớ đến Python 2, khi pythoncó thể bắt đầu đề cập đến python3. Điều này sẽ hoàn toàn cho thuận tiện, và có thể và không nên được thực hiện sớm, nếu có! Không có vội, vì tác động sau:

Hệ thống “Current cũ” sẽ không có sự hiểu biết về python2, chỉ python, vì vậy nó làm cho cảm giác hoàn hảo để giữ Python 2 mã tìm kiếm python. Đây là lý do tại sao pythonnên tham khảo Python 2 cho miễn là mã Python 2 tồn tại.

Mã mới được viết cho Python 2, nếu điều đó có ý nghĩa, hoàn toàn có thể tìm kiếm python. Nó cũng có thể tìm kiếm python2, nếu nó được dự định chỉ chạy trên các hệ thống nhận biết và chăm sóc tốt của Python 3 (sẽ cung cấp liên kết như vậy).

Lợi ích của việc sử dụng mã Python 2 python2là nó không cần phải chạm thêm một lần nữa khi pythonbắt đầu đề cập đến python3, điều này có thể không bao giờ xảy ra hoặc một lần pythonbiến mất, điều này có thể hoặc không thể xảy ra. (Điều đó có thể trở thành sự thật, nếu mã Python 2 chết sau khi giả thuyết Python 4 trở nên phổ biến với trình thông dịch của nó python4. - Bởi vì để nó trỏ đến một trong hai python3hoặc python4sẽ gây nhầm lẫn.)


2

Python có cả phiên bản 2.x, 3.x. nếu bạn gọi python vì nó được trỏ đến python 2.x nó sẽ tải python 2.x

Hình ảnh dưới đây sẽ giúp bạn.

nhập mô tả hình ảnh ở đây


1
Làm thế nào để bạn gõ cùng một lệnh và nhận được 2 kết quả khác nhau?
givonz

4
đầu ra khác nhau từ lần gọi thứ hai pythonlà từ việc sử dụng <tab>để truy vấn bộ tự động hoàn thành, sau đó đưa ra các hoán vị có thể có python*và đưa bạn trở lại một dấu nhắc mới.
Andrew Keech

@givonz, hmm Tôi đã sử dụng khóa TAB bro. nó không đầu ra. nó có thể là mô hình nhị phân.
rdʒɑ

Bỏ phiếu tiêu cực để làm gì?
rdʒɑ

2
Tôi đã không downvote nhưng tôi nghĩ rằng câu trả lời sẽ giải thích tại sao 2 đầu ra đầu tiên khác nhau và vai trò của nó là gì apt-cache, đặc biệt là đối với người mới sử dụng Ubuntu.
AL

2

Python 3.x nên hoạt động với 16.04 - Trên thực tế, nó chắc chắn S work hoạt động. Tôi có Ubuntu 14.04 và tôi có Python 3.4.3 - Tất cả những gì bạn phải làm để kiểm tra nó là gõ python3và nó sẽ cho bạn biết phiên bản nào bạn đang chạy.


2
Vâng, tôi sẽ không gọi bằng khoa học máy tính. Và nói đúng ra: Ubuntu là HĐH dựa trên Linux chứ không phải Unix.
magu_

Tôi vẫn chưa hiểu về linux bet & unix bên cạnh một số lời nhắc lệnh & các lệnh khác nhau, nhưng từ ngữ chặt chẽ. mặc dù gui tiên tiến hơn nhiều so với những gì tôi thấy trong solaris.
givonz

1
-1 Điều này không giải quyết câu hỏi tại sao .
David Foerster
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.