Các vấn đề về Python 3.9

Trăn 3. 11 hiện đã hết – nhưng bạn có nên chuyển sang nó ngay không?

Ngay sau khi phát hành, có thể bạn chưa muốn nâng cấp. Giờ đây, nó đã ra mắt lâu hơn nhưng bạn vẫn có thể gặp sự cố, nhưng việc nâng cấp đáng để thử. Để hiểu tại sao, chúng ta cần xem xét cách đóng gói Python, quy trình phát triển phần mềm và xem lịch sử của các bản phát hành trước đây

Các sự cố với bản phát hành Python chính mới

Cũng như nhiều dự án nguồn mở, Python, thư viện Python và hầu hết chuỗi công cụ và gói được đề cập trong bài viết này đều dựa trên lao động tình nguyện. Không ai trong số này nên được coi là một lời phàn nàn đối với những người làm công việc bảo trì, họ đang làm công việc cực kỳ có giá trị miễn phí và mọi thứ đều cần có thời gian. Ngoài ra, do quá trình nâng cấp liên quan đến rất nhiều nhóm khác nhau nên việc điều phối và phát hành thậm chí còn mất nhiều thời gian hơn

Với ý nghĩ đó, chúng ta hãy xem xét các vấn đề khi sử dụng 3. 11 ngay sau khi phát hành và trong những tháng tiếp theo

1. Thiếu gói nhị phân

Để bắt đầu, không phải tất cả các gói đều có thể được cài đặt trên 3. 11 chưa. Ví dụ: psycopg2-binary cung cấp các ràng buộc cho cơ sở dữ liệu PostgreSQL; . Khi tôi cố cài đặt nó trên Python 3. 11 vào ngày 3. 11 phát hành, mọi thứ không suôn sẻ

$ python3.11 -m pip install psycopg2-binary
...
pg_config is required to build psycopg2 from source.  Please add the directory
containing pg_config to the $PATH or specify the full executable path with the
option:
...

Điều gì đang xảy ra?

Thông thường, những người bảo trì gói Python tải lên các phiên bản đã biên dịch của các gói của họ–được gọi là “bánh xe”–lên PyPI. Khi bạn cài đặt một gói, bạn chỉ cần tải xuống bánh xe nhị phân và không cần biên dịch nó [trừ khi bạn đang sử dụng Alpine Linux, trong trường hợp đó, bánh xe có thể có hoặc không có sẵn]

Nhưng ít nhất là trong một thời gian ngắn sau 3. 11, một số gói sẽ không có bánh xe cho Python 3. 11 đã tải lên chưa. Trong trường hợp này, psycopg2-binary đã thêm bánh xe cho 3. 11 vào tháng 10. 25, ngay ngày hôm sau

Nói chung khi thời gian trôi qua, các nhà bảo trì gói ngày càng nỗ lực hơn để rút ngắn khoảng thời gian này. Ví dụ, hãy xem xét NumPy

  • cho 3. 9, nó không có sẵn bánh xe cho đến một thời gian sau khi phát hành
  • Cho 3. 10, nó đã có bánh xe Linux vào ngày thứ 3. 10, nhưng không phải macOS và Windows, mất nhiều thời gian hơn
  • Cho 3. 11, bánh xe đã có sẵn cho tất cả các nền tảng ngay cả trước 3. 11 đã được phát hành

Cá nhân tôi đã có các nhánh sẵn sàng cho một số dự án của riêng mình để xây dựng 3. 11 bánh xe, nhưng không thực hiện bất kỳ bản phát hành nào trước vì các phiên bản Python ứng cử viên phát hành của GitHub Actions chỉ khác nhau đôi khi gây khó khăn cho cuộc sống. Một số dự án yêu cầu viết mã để hỗ trợ các API đã thay đổi trong nội bộ Python, nhưng cuối cùng sẽ được phát hành—chúng tôi sẽ đề cập đến vấn đề đó tiếp theo

Quan trọng. Hãy chắc chắn rằng bạn nâng cấp pip trước khi sử dụng nó. Các phiên bản cũ hơn có thể không hỗ trợ bánh xe nhị phân cho 3. 11 trên Linux và thay vào đó, pip sẽ cố gắng xây dựng từ nguồn

2. gói không tương thích

Đôi khi hỗ trợ một bản phát hành mới chỉ là vấn đề biên dịch lại mã. Điều đó có nghĩa là bạn có thể tự biên dịch nó, với đủ công việc và nếu không, người bảo trì thường sẽ phát hành một bánh xe mới khá nhanh. Tuy nhiên, trong các trường hợp khác, mã không tương thích và yêu cầu một số công việc để hỗ trợ các bản phát hành Python mới

Trăn 3. 11 hỗ trợ cho dự án Numba chẳng hạn, vẫn đang trong quá trình hoàn thiện kể từ ngày 8 tháng 12 năm 2022. Rõ ràng là họ đã mất 6 tháng sau khi phát hành cho đến khi họ có Python 3. 9 hỗ trợ, và 3 tháng sau 3. 10

Đối với các dự án của riêng tôi, một số chỉ nên hoạt động, nhưng e. g. quá trình chuyển hồ sơ bộ nhớ hiệu suất Sciagraph mất vài tháng do một số thay đổi lớn đối với nội bộ của Python

Ngay cả khi mã tương thích, nếu phần phụ thuộc không tương thích thì vẫn có thể trì hoãn việc phát hành. Ví dụ: khi tôi bắt đầu chuyển Fil sang 3. 10, tôi không thể phát hành vì bộ thử nghiệm dựa trên gói numexprnumexpr sẽ không phát hành 3. 10 bánh xe cho đến khi NumPy hoàn thành 3. 10 bánh xe, điều đó đã không xảy ra ngay lập tức. Vì vậy, có một cây phụ thuộc chặn một bản phát hành mới

Với nhiều gói Python được duy trì bởi các tình nguyện viên với thời gian rảnh hạn chế và hoạt động độc lập, chỉ cần thời gian để các bản cập nhật thấm qua hệ thống

3. hỗ trợ conda

Nếu bạn đang sử dụng Conda-Forge, Python 3. 11 triển khai diễn ra khá nhanh. Rất nhiều thứ được tự động hóa, một trong những lợi ích của Conda-Forge so với PyPI, miễn là các gói cơ bản đã hỗ trợ 3. 11, nó sẽ diễn ra khá nhanh khi nó đang diễn ra

5. Lỗi trong Python

Trăn 3. 10. 0 được phát hành vào tháng 10 năm 2021. 3. 10. 1 được phát hành 2 tháng sau đó, với

Tất nhiên, luôn có một bản phát hành sửa lỗi khác trong tương lai, nhưng với khoảng thời gian 12 tháng giữa các bản phát hành chính, rất nhiều mã mới sẽ được viết nhưng không được sử dụng rộng rãi. Điều đó có nghĩa là một bản phát hành tiếp theo với nhiều bản sửa lỗi. Trăn 3. 11. 1 được phát hành vào tháng 12 năm 2022, với nhiều bản sửa lỗi khi các thư viện và sau đó các ứng dụng bắt đầu chuyển đổi và gặp nhiều sự cố hơn

6. Thiếu hỗ trợ chuỗi công cụ

Các phiên bản Python mới thường có cú pháp mới và đó là trường hợp của Python 3. 11. bạn có thể nắm bắt nhiều ngoại lệ cùng một lúc với. Tuy nhiên, các công cụ khác cũng cần hỗ trợ cú pháp mới—bộ định dạng tự động, bộ lọc, v.v. Cho đến khi họ làm như vậy, bạn không thể sử dụng cú pháp mới. Ví dụ: kể từ tháng 12 năm 2022, kẻ nói dối PyLint vẫn coi cú pháp này là một lỗi

Điều đó đang được nói, Python 3. 11 có những lợi ích đáng kể ngay cả khi bạn bỏ qua cú pháp mới; . Vì vậy, bạn chỉ có thể chọn không sử dụng cú pháp mới trong thời gian ngắn

3. 11 liên quan đến nhiều thay đổi nội bộ quan trọng hơn bình thường, do đó, nó cũng ảnh hưởng đến các công cụ khác ngay cả khi chúng chạy. Ví dụ: coverage.py chậm hơn nhiều. Tuy nhiên, nó vẫn chạy và mã sản xuất chạy nhanh hơn nhiều có vẻ như là một sự đánh đổi hợp lý

Nâng cấp có đáng không?

Cho rằng cần phải nâng cấp—một số thử nghiệm bổ sung, một số chỉnh sửa đối với mã của bạn—bạn có thể ngừng nâng cấp các phiên bản Python vô thời hạn. Tại sao phải lo lắng về tính không tương thích, phiên bản mới, v.v., khi bạn có thể gắn bó với phiên bản hiện tại của mình vô thời hạn?

Vấn đề là Python không được hỗ trợ vô thời hạn, cũng như các thư viện không hỗ trợ vô thời hạn tất cả các phiên bản Python; . Trăn 3. 6 đã kết thúc cập nhật bảo mật vào tháng 12 năm 2021 và Python 3. 7 sẽ kết thúc cập nhật bảo mật vào tháng 6 năm 2023

Vì vậy, sớm hay muộn bạn sẽ phải nâng cấp. Và nếu bạn đang chạy trên phiên bản Python 5 năm tuổi, thì việc chuyển đổi sẽ trở thành một vấn đề lớn—bạn sẽ thường phải xử lý nhiều thay đổi phiên bản chéo quan trọng hơn trong cả Python và trong các thư viện cùng một lúc. Điều gì làm cho việc nâng cấp trở nên đáng sợ

Thay vì một sự kiện nâng cấp lớn đáng sợ cứ sau vài năm, sẽ an toàn hơn nhiều nếu có một quá trình nâng cấp nhỏ hơn liên tục, liên tục. Bất cứ khi nào có phiên bản Python chính mới hoặc phiên bản thư viện chính mới, hãy đợi một chút rồi chuyển đổi

Tuần Python 3. 11 đã được phát hành, có thể bạn không muốn nâng cấp, nhưng chắc chắn bạn muốn sử dụng 3. 10. Nếu bạn ở phía sau đủ xa, hãy thực hiện một loạt các nâng cấp. 3. 8, 3. 9, 3. 10, và cuối cùng, 3. 11

Khi nào bạn nên chuyển sang Python 3. 11?

Tối thiểu, sau một bản phát hành mới quan trọng, bạn sẽ cần đợi cho đến khi

  1. Tất cả các thư viện của bạn đều hỗ trợ rõ ràng bản phát hành Python mới
  2. Tất cả các công cụ mà bạn dựa vào đều hỗ trợ rõ ràng cho bản phát hành Python mới

Bây giờ một thời gian đã trôi qua kể từ lần phát hành đầu tiên và 3. 11. 1 đã được phát hành, có lẽ đáng để dùng thử. Nếu phụ thuộc bạn yêu cầu vẫn còn thiếu 3. 11 hỗ trợ, tiếp tục thử lại mỗi tháng

Bài viết tiếp theo. Xây dựng trên nền đất vững chắc. bản dựng Docker có thể tái sản xuất cho Python
Bài viết trước. Việc sử dụng Alpine có thể khiến các bản dựng Python Docker chậm hơn 50 lần

Hướng dẫn ngắn gọn và định hướng hành động về đóng gói Docker cho sản xuất

Đóng gói Docker cho sản xuất rất phức tạp, với hơn 70 phương pháp hay nhất để thực hiện đúng. Và bạn muốn hình ảnh nhỏ, bản dựng nhanh và ứng dụng Python của bạn chạy an toàn

Đi theo con đường nhanh chóng để học các phương pháp hay nhất bằng cách sử dụng Sổ tay sản xuất Python trên Docker

sách điện tử miễn phí. "Giới thiệu về Dockerizing cho sản xuất"

Tìm hiểu quy trình đóng gói DevOps lặp đi lặp lại từng bước trong sách điện tử nhỏ miễn phí này. Bạn sẽ tìm hiểu những gì cần ưu tiên, các quyết định bạn cần đưa ra và các quy trình tổ chức đang diễn ra mà bạn cần bắt đầu

Ngoài ra, bạn sẽ tham gia cùng hơn 6500 người nhận email hàng tuần về các công cụ và kỹ thuật thực tế, từ cách đóng gói Docker đến các phương pháp hay nhất về Python

Là Python 3. 9 được hỗ trợ?

Trăn 3. 9 là phiên bản Python hiện được hỗ trợ . Trang web này hiển thị Python 3. 9 hỗ trợ cho 360 gói được tải xuống nhiều nhất trên PyPI. 274 gói xanh [76. 1%] hỗ trợ Python 3. 9; . 9%] không hỗ trợ rõ ràng Python 3. 9 chưa.

Là Python 3. 9 tốt hơn?

Trăn 3. 9 cuộn trong hai cải tiến lớn giúp tăng hiệu suất mà không yêu cầu bất kỳ thay đổi nào đối với mã hiện có . Cải tiến đầu tiên liên quan đến việc sử dụng nhiều hơn giao thức vectorcall được giới thiệu trong Python 3. 8.

Chủ Đề