Hướng dẫn change python default version - thay đổi phiên bản mặc định của python

[Cập nhật cho năm 2021]

(Bất kể bạn đang ở trên Mac, Linux hay Windows :)

Nếu bạn bối rối về cách bắt đầu phiên bản Python mới nhất, trên hầu hết các nền tảng thì đó là trường hợp python3 khiến bản cài đặt python2 của bạn còn nguyên vẹn (vì lý do tương thích ở trên); Do đó, bạn có thể bắt đầu Python3 với lệnh python3.

Historically...

Công ước đặt tên là nói chung, hầu hết các tập lệnh sẽ gọi Python2 hoặc Python3 một cách rõ ràng. Điều này đã xảy ra do nhu cầu tương thích ngược.

Mặc dù về mặt kỹ thuật Python thậm chí không đảm bảo khả năng tương thích ngược giữa các phiên bản nhỏ, Python3 thực sự phá vỡ khả năng tương thích ngược. Vào thời điểm đó, các chương trình gọi 'python' đang mong đợi Python2 (đây là phiên bản chính vào thời điểm đó). Các hệ thống cực kỳ cũ có thể có các chương trình và tập lệnh mong đợi ____ 4 = python2 và thay đổi điều này sẽ phá vỡ các chương trình và tập lệnh đó.

Tại thời điểm câu trả lời này được viết, OP không nên thay đổi điều này do duy trì khả năng tương thích cho các tập lệnh cũ.

Năm 2021 ...

Ngày nay, nhiều năm sau quá trình chuyển đổi Python2-> Python3, hầu hết các phần mềm đều đề cập rõ ràng đến Python2 hoặc Python3 (ít nhất là trên Linux). Ví dụ, họ có thể gọi #!/usr/bin/env python2 hoặc #!/usr/bin/env python3. Điều này ví dụ (Python-Is-Python3-Package) đã giải phóng lệnh Python để được giải quyết theo mặc định của người dùng, nhưng nó thực sự phụ thuộc vào hệ điều hành.

Đơn thuốc cho cách phân phối nên xử lý lệnh python được viết vào năm 2011 dưới dạng PEP 394-lệnh "Python" trên các hệ thống giống UNIX. Nó đã được cập nhật lần cuối vào tháng 6 năm 2019.

Về cơ bản nếu bạn đang viết một thư viện, bạn nên chỉ định phiên bản Python (2 hoặc 3 hoặc hạt mịn hơn trong các trường hợp cụ thể) bạn có thể sử dụng. Nếu không là người dùng cuối, bạn nên thoải mái đổi tên việc này cho mục đích sử dụng cá nhân của riêng bạn (mặc dù hệ điều hành hoặc phân phối của bạn có thể không làm cho điều đó dễ dàng).

Bí danh Shell:

Tuy nhiên, bạn có thể tạo ra một bí danh tùy chỉnh trong vỏ của bạn. Cách bạn làm như vậy phụ thuộc vào vỏ, nhưng có lẽ bạn có thể làm alias py=python3 và đặt nó vào tệp khởi động shell của bạn. Điều này sẽ chỉ hoạt động trên máy tính cục bộ của bạn (như bình thường) và có phần không cần thiết so với việc chỉ cần gõ nó ra (trừ khi bạn gọi lệnh liên tục).

Người dùng bối rối không nên cố gắng tạo bí danh hoặc môi trường ảo hoặc tương tự tạo ra python thực thi python3; Đây là hình thức kém. Điều này có thể chấp nhận được ngày nay, nhưng PEP 394 đề nghị khuyến khích người dùng sử dụng ảo.

Khác nhau 3.* phiên bản hoặc 2.* phiên bản:

Trong trường hợp cực kỳ khó xảy ra rằng nếu ai đó đến với câu hỏi này với hai phiên bản Python3, ví dụ: 3.1 so với 3.2 và bạn bối rối rằng bằng cách nào đó bạn đã cài đặt hai phiên bản Python, điều này có thể là do bạn đã thực hiện cài đặt thủ công và/hoặc cài đặt thủ công. Bạn có thể sử dụng các cơ sở cài đặt/chương trình/cài đặt chương trình tiêu chuẩn của OS để giúp theo dõi mọi thứ và có lẽ (trừ khi bạn đang thực hiện công việc Dev đáng ngạc nhiên bị ảnh hưởng bởi một số thay đổi không tương thích ngược giữa các phiên bản nhỏ) xóa phiên bản cũ ( hoặc làm python32 nếu bạn đã cài đặt thủ công). Nếu bạn yêu cầu hai phiên bản, thì hãy cấu hình lại biến python33 của bạn để phiên bản 'mặc định' bạn muốn ở phía trước; Hoặc nếu bạn đang sử dụng hầu hết các bản phân phối Linux, lệnh bạn đang tìm kiếm là sudo python34. Đảm bảo rằng bất kỳ chương trình nào bạn chạy cần truy cập vào các phiên bản cũ hơn có thể được gọi đúng bởi môi trường gọi hoặc shell của họ (bằng cách thiết lập var python35 trong môi trường đó).

Một chút về $ Path

Sidenote: Để xây dựng một chút trên đường dẫn: Các cách thông thường mà các chương trình được chọn là thông qua biến môi trường python35 (python37 trên Linux và Mac). Bạn luôn có thể chạy một chương trình với đường dẫn đầy đủ, ví dụ: python38 hoặc python39 sau đó python20 (thay thế trống bằng chương trình 'tiếng vang' mà tôi đã đề cập ở trên chẳng hạn), nhưng nếu không thì việc nhập python21 không có ý nghĩa gì nếu không có biến env env, chúng tôi hoàn toàn có thể tìm kiếm các tệp từ (nếu python23 không phải ở python35, sau đó nó sẽ nói python25). Lệnh khớp đầu tiên trong thư mục đầu tiên là lệnh được thực thi (lệnh python26 trên Linux và Mac sẽ cho bạn biết con đường phụ này là gì). Thông thường, đó là (ví dụ: trên Linux, nhưng tương tự trên Mac) một cái gì đó giống như python27, đó là một liên kết khác với các liên kết khác với phiên bản cuối cùng ở đâu đó, ví dụ:

% echo $PATH
/usr/sbin:/usr/local/bin:/usr/sbin:usr/local/bin:/usr/bin:/bin

% which python
/usr/bin/python
% which python2
/usr/bin/python2
% ls -l /usr/bin/python
lrwxrwxrwx 1 root root 7 Mar  4  2019 /usr/bin/python -> python2*
% ls -l /usr/bin/python2  
lrwxrwxrwx 1 root root 9 Mar  4  2019 /usr/bin/python2 -> python2.7*
% ls -l /usr/bin/python2.7
-rwxr-xr-x 1 root root 3689352 Oct 10  2019 /usr/bin/python2.7*

% which python3         
/usr/bin/python3
% ls -l /usr/bin/python3
lrwxrwxrwx 1 root root 9 Mar 26  2019 /usr/bin/python3 -> python3.7*
% ls -l /usr/bin/python3.7
-rwxr-xr-x 2 root root 4877888 Apr  2  2019 /usr/bin/python3.7*

% ls -l /usr/bin/python*
lrwxrwxrwx 1 root root       7 Mar  4  2019 /usr/bin/python -> python2*
lrwxrwxrwx 1 root root       9 Mar  4  2019 /usr/bin/python2 -> python2.7*
-rwxr-xr-x 1 root root 3689352 Oct 10  2019 /usr/bin/python2.7*
lrwxrwxrwx 1 root root       9 Mar 26  2019 /usr/bin/python3 -> python3.7*
-rwxr-xr-x 2 root root 4877888 Apr  2  2019 /usr/bin/python3.7*
lrwxrwxrwx 1 root root      33 Apr  2  2019 /usr/bin/python3.7-config -> x86_64-linux-gnu-python3.7-config*
-rwxr-xr-x 2 root root 4877888 Apr  2  2019 /usr/bin/python3.7m*
lrwxrwxrwx 1 root root      34 Apr  2  2019 /usr/bin/python3.7m-config -> x86_64-linux-gnu-python3.7m-config*
lrwxrwxrwx 1 root root      16 Mar 26  2019 /usr/bin/python3-config -> python3.7-config*
lrwxrwxrwx 1 root root      10 Mar 26  2019 /usr/bin/python3m -> python3.7m*
lrwxrwxrwx 1 root root      17 Mar 26  2019 /usr/bin/python3m-config -> python3.7m-config*

Sidenote2: (Trong trường hợp hiếm hơn, chương trình Python gọi một chương trình phụ với mô-đun python28, để chỉ định chương trình nào sẽ chạy, người ta có thể sửa đổi các đường dẫn của các quy trình con với python29 từ mô-đun SYS hoặc biến môi trường python30 được đặt trên cha mẹ, hoặc chỉ định đường dẫn đầy đủ ... nhưng vì đường dẫn được kế thừa bởi các quá trình con, đây không phải là vấn đề từ xa.)