Rất nhiều tester thích sử dụng Python. Rất nhiều người thử nghiệm trên máy Windows. Hiện tại có một khoảng cách lớn trong thế giới Python giữa 2. x và 3. chi nhánh x. [Xem thêm chi tiết về điều này. ] Điều này thường đặt người thử nghiệm vào tình thế phải tạo ra các giải pháp Python chạy trên cả hai phiên bản. Nhưng, ít nhất là trên Windows, điều này thật khó khăn khi cài đặt hai phiên bản Python và dễ dàng di chuyển giữa chúng. Ở đây tôi sẽ nói về cách nhóm phát triển Python đã giảm bớt điều này với trình khởi chạy Windows
Giải pháp chính thức để cùng tồn tại là Trình khởi chạy Python cho Windows, được đề cập trong PEP 397, được đưa vào Python 3. 3. 0. Tài liệu về vấn đề này đôi khi rất khó để đọc hết nên tôi muốn trình bày những gì tôi hy vọng là một cái nhìn đơn giản hóa ở đây
Cài đặt nhiều phiên bản
Giả sử bạn muốn có 3 phiên bản mới nhất. nhánh x và 2. nhánh x được cài đặt cùng lúc. Tại thời điểm tôi viết bài này, đó sẽ là 3. 4. 1 và 2. 7. 7. Vì vậy, đây là những gì bạn làm
- Truy cập trang tải xuống Python
- Tải về 3. 4. 1 gói cài đặt
- Cài đặt nó và chấp nhận mặc định. [Cái này quan trọng. Các giá trị mặc định bao gồm không thêm python. exe vào đường dẫn. ]
- Tải về 2. 7. 7 gói cài đặt
- Cài đặt nó và lần này KHÔNG chấp nhận các giá trị mặc định. Cụ thể, hãy xóa tùy chọn “Đăng ký tiện ích mở rộng” khỏi cài đặt
Cài đặt 3. 4. 1 gói sẽ có py. mắt và pyw. exe vào %SYSTEMROOT% [trên hệ thống Windows PATH] và sau đó liên kết chúng với. py và. tập lệnh pyw, tương ứng. Phần cuối cùng đó là quan trọng. quá trình cài đặt sẽ đăng ký chúng làm ứng dụng thực thi khi Python được thực thi. Đây chính là lý do tại sao tôi yêu cầu bạn xóa tùy chọn Đăng ký tiện ích mở rộng cho 2. 7 cài đặt. Làm điều đó sẽ ghi đè trình khởi chạy là mặc định. Lưu ý rằng những py này. exe và pyw. exe khác với python bình thường. exe có thể thực thi được mà mỗi gói bạn đã cài đặt sẽ được đặt trong c. \Python34 và c. \Python27, tương ứng
Ghi chú. Có thể là lần lặp lại tiếp theo của 2. 7. x launcher sẽ loại bỏ thực tế là Tiện ích mở rộng đăng ký được cài đặt theo mặc định. Điều chính là chỉ chú ý đến nó và đảm bảo rằng cài đặt đã bị tắt
Nhưng làm thế nào để tất cả điều này làm việc? . exe và pyw. tập tin exe
- Mở các tệp mã nguồn và mã byte Python được khởi chạy bằng cách nhấp vào biểu tượng hoặc lệnh tên tệp
- Không yêu cầu đường dẫn thư mục hoặc cài đặt PATH khi được sử dụng tại dòng lệnh
- Chấp nhận số phiên bản Python được chuyển vào dưới dạng đối số dòng lệnh
- Chấp nhận kiểu Unix #. các dòng nhận xét ở đầu tập lệnh để xác định phiên bản Python sẽ sử dụng
Bây giờ hãy xem bạn thực sự làm tất cả những điều đó xảy ra như thế nào
Sử dụng Trình khởi chạy
Cơ chế trình khởi chạy mới có nghĩa là giờ đây bạn có thể chọn các phiên bản một cách rõ ràng trên cơ sở từng tệp hoặc từng lệnh. Hoặc, trên thực tế, cả hai cùng một lúc. Bạn cũng có thể chỉ định các phiên bản ở dạng một phần hoặc toàn bộ trong cả hai ngữ cảnh đó. Tôi cho rằng một loạt các tùy chọn này là tốt, nhưng nó có thể gây nhầm lẫn. Vì vậy, ví dụ: nếu bạn muốn chọn phiên bản Python để chạy trên mỗi tệp, bạn có thể sử dụng các nhận xét “shebang” kiểu Unix như thế này
1
2
3
4
5
#. trăn2
#. trăn3
#. /usr/bin/python2. 7
#. /usr/bin/env python3. 4
#. c. \Python34\python. người cũ
Theo truyền thống, những dòng shebang đó đã bị bỏ qua trên Windows, nhưng Python phiên bản 3. 3 trở lên cũng sẽ phân tích cú pháp dòng này trên Windows. Có một lưu ý về điều này, tôi sẽ nói về điều này sau
Nếu bạn muốn chọn phiên bản cho mỗi lệnh, bạn có thể sử dụng các tùy chọn dòng lệnh như thế này
1
2
3
4
py -2 my_file. py
py -3 my_file. py
py -2. 7 tệp của tôi. py
py -3. 4 tệp của tôi. py
Trình khởi chạy cũng áp dụng một số logic để chọn một phiên bản Python cụ thể khi thông tin phiên bản bị thiếu hoặc chỉ được mô tả một phần. Ví dụ: trong cả hai bộ ví dụ của tôi ở trên, bạn có thể thấy tôi sử dụng tham chiếu chung cho “python2” và “python3” [hoặc “py -2” và “py -3”]. Cách thức hoạt động của nó là 2 phiên bản mới nhất. x Phiên bản Python được chạy khi chỉ có 2 được chỉ định. Vì vậy, nếu bạn có nhiều 2. x được cài đặt, đây là phiên bản mới nhất sẽ được sử dụng nếu bạn chỉ định một phiên bản chung 2. Điều tương tự cũng áp dụng cho 3 chung. phiên bản Python mới nhất trong 3. nhánh x sẽ được sử dụng
Tuy nhiên, bạn có thể thay đổi hành vi này nếu muốn bằng cách đặt giá trị cho các biến PY PYTHON2 và PYTHON3. Ví dụ: nếu bạn có Python 2. 5, 2. 6 và 2. 7 nhưng bạn muốn một dòng chung chung như #! python2
để sử dụng 2. 6, thì bạn chỉ cần đặt biến PY_PYTHON2 thành 2. 6. Điều này hoạt động tương tự khi sử dụng PY_PYTHON3 khi có nhiều Python 3. phiên bản x được cài đặt
Điều thú vị hơn đối với một số người là 2. phiên bản x được ưu tiên cho các tệp không đặt tên phiên bản trong dấu #. dòng khi được khởi chạy bằng cách nhấp vào biểu tượng hoặc các cuộc gọi dòng lệnh chung. Đó là một điểm quan trọng. theo mặc định, một 2. x [nếu có] sẽ được trình khởi chạy sử dụng làm Python mặc định ngay cả khi phiên bản 3. phiên bản x có sẵn. Tuy nhiên, bạn có thể thay đổi hành vi này nếu đặt biến môi trường PY_PYTHON và đặt thành 3
Vì vậy, để rõ ràng, giả sử bạn có Python 3. 4. 1 và 2. 7. 7 cài đặt. Bạn có một tập lệnh Python [my_file. py] với dòng shebang sau. #!/usr/bin/python
. Trong trường hợp này, tập lệnh đó sẽ chạy với Python 2. 7. 7. Bạn có thể thay đổi thao tác này bằng cách
- Thay đổi dòng shebang thành.
#!/usr/bin/python3
- Chỉ định phiên bản tại dòng lệnh.
py -3 my_file.py
- Thay đổi giá trị của PY_PYTHON thành 3
Đây có thể là hành vi kỳ quặc nhưng tôi nghĩ lý do căn bản ở đây là gấp đôi. Một là nhiều người sử dụng hệ sinh thái Python vẫn bị mắc kẹt trong 2. x vì nhiều thư viện vẫn đang trong quá trình chuyển sang Python 3. Vì vậy, mặc định của Python 2 có thể hợp lý. Thứ hai là các phiên bản dựa trên Unix có xu hướng dựa vào các liên kết tượng trưng từ python
đến một phiên bản cụ thể và đó có xu hướng là phiên bản 2. x trên hầu hết các bản phân phối. Vì vậy, tôi nghĩ rằng trình khởi chạy Windows đang cố gắng mô phỏng trường hợp sử dụng có khả năng nhất cho các nhà phát triển Python, nhưng điều này có thể khiến những người mới sử dụng Python phải trả giá
Một vài lưu ý
Trước đó, đặc biệt với các dòng shebang, tôi đã đề cập rằng có một lưu ý mà tôi sẽ đề cập. Thông báo cụ thể đó là trình khởi chạy Windows mới nhận ra Unix #. các dòng bắt đầu bằng #!/usr/bin/env python
chứ không phải các dạng khác có khả năng được sử dụng, như #!/bin/env python
. Các tập lệnh với các dòng Shebang này sẽ hoạt động tốt trên các máy chạy Unix nhưng sẽ không thành công trên Windows với một lỗi như thế này. Unable to create process using '/bin/env python3.4
. Bạn sẽ thấy điều tương tự xảy ra với một dòng shebang như thế này #! /bin/python
. Có vẻ như trình khởi chạy yêu cầu bạn thực hiện theo một trong các mẫu sau
- /usr/bin/env con trăn*
- /usr/bin/trăn*
- /usr/local/bin/python*
- con trăn*
Một lưu ý khác cần lưu ý là nếu có cả hai dòng shebang trong tập lệnh Python và một công tắc số phiên bản được cung cấp trong dòng lệnh được sử dụng để thực thi tập lệnh đó, thì phiên bản dòng lệnh sẽ ghi đè phiên bản được chỉ định trong dòng shebang
Lưu ý rằng cả hai trình khởi chạy sẽ tự động tắt cài đặt PATH thành vị trí của python. người cũ. Điều này cũng quan trọng. Trong thế giới “Windows Launcher” mới, nếu bạn bắt đầu tập lệnh bằng py
thay vì python
, thì có python. exe trên PATH tốt nhất là không liên quan và tệ nhất là khó hiểu, bởi vì toàn bộ vấn đề là py
gộp lại python
và gọi Python có liên quan có thể thực thi được dựa trên ngữ cảnh
Một lưu ý khác, mặc dù có thể hữu ích, là trình khởi chạy cũng sẽ cho phép bạn phân biệt giữa các phiên bản Python 32 bit và 64 bit đã được cài đặt. Vì vậy, tôi có thể có Python 2. 7. 7 được cài đặt ở cả 32-bit và 64-bit cũng như có 3. 4. 1 được cài đặt cả 32-bit và 64-bit. Sử dụng trình khởi chạy sẽ cho phép tôi phân biệt giữa tất cả những thứ đó
Tôi đã đề cập trước đó cách Python 2 “mới nhất”. x hoặc Python 3. x được sử dụng nếu 2 hoặc 3 chung được chỉ định. Tôi hy vọng những điều trên đã rõ ràng điều đó có nghĩa là gì nhưng chỉ để làm cho nó rõ ràng. "mới nhất" không đề cập đến "được cài đặt mới nhất. ” Nó đề cập đến “số phiên bản mới nhất. ” Trước đây, cài đặt phiên bản Python cũ hơn trên máy đã có phiên bản mới hơn có nghĩa là “bản cài đặt mới nhất” sẽ được sử dụng thay cho “phiên bản mới nhất”. Trình khởi chạy thay đổi điều đó và luôn cố gắng sử dụng phiên bản mới nhất mà nó có thể tìm thấy trên máy
Nếu bạn yêu cầu phiên bản Python chưa được cài đặt, bạn sẽ nhận được thông báo lỗi dọc theo dòng #!/usr/bin/python
3
Ngoài ra, tôi không tìm thấy quá nhiều cảnh báo khác đáng được đề cập. Tôi đã sử dụng nhiều phiên bản Python trong một thời gian và không gặp vấn đề gì. Nếu Python là ngôn ngữ bạn chọn, nhưng bạn lo lắng về 2. x/3. x chia hiện đang tồn tại. đừng sợ. Bạn có thể dễ dàng phát triển với cả hai