26 điểm bởi geniuskey 2024-07-14 | 5 bình luận | Chia sẻ qua WhatsApp

Modern Good Practices for Python Development

Bài viết về các thực hành hiện đại tốt nhất cho Python của Stuart Ellis đề cập đến những điểm quan trọng cần cân nhắc khi phát triển bằng Python. Nội dung chính như sau:

Sử dụng Python

  • Tránh dùng Python tích hợp sẵn trong hệ điều hành: Python đi kèm hệ điều hành có thể là phiên bản cũ.
  • Cài Python bằng công cụ hỗ trợ nhiều phiên bản: dùng các công cụ như pyenv hoặc mise.
  • Sử dụng phiên bản Python mới nhất: dùng bản ổn định mới nhất để nhận các bản vá bảo mật và cải thiện hiệu năng.
  • Dùng pipx để chạy các ứng dụng dành cho developer: chạy ứng dụng trong môi trường cô lập thông qua pipx.
  • Sử dụng công cụ quản lý dự án: khuyến nghị PDM, Hatch, Mise, Rye.

Phát triển dự án Python

  • Định dạng mã nguồn: dùng Ruff.
  • Lint mã nguồn: khuyến nghị Ruff.
  • Kiểm thử với pytest: dùng các plugin liên quan như pytest-randomlypytest-cov.
  • Đóng gói: dùng gói wheel và khi cần thì dùng image container hoặc PyInstaller.

Cú pháp ngôn ngữ

  • Dùng type hint: PEP 484, PEP 526.
  • Định dạng chuỗi bằng f-string: PEP 498.
  • Dùng đối tượng datetime có nhận biết múi giờ: PEP 615.

Thiết kế ứng dụng

  • Dùng logging thay cho print().
  • Dùng định dạng TOML cho cấu hình: PEP 680.
  • Chỉ dùng asynchronous I/O khi thật sự cần thiết.

Thư viện

  • Xử lý đầu vào dòng lệnh bằng argparse.
  • Xử lý đường dẫn tệp và thư mục bằng pathlib.
  • Dùng os.scandir() nhanh và hiệu quả hơn thay cho os.listdir(): PEP 471.
  • Dùng subprocess khi thực thi lệnh bên ngoài: PEP 324.
  • Với web client, dùng httpx thay cho requests.

Thực hành tốt cho dự án

Để biết thêm chi tiết, hãy tham khảo bài viết đầy đủ.
.
.

Tóm tắt thảo luận về Python Modern Practices trên Hacker News

Thảo luận Hacker News về Python Modern Practices đã chia sẻ ý kiến của người dùng về nhiều công cụ và phương pháp khác nhau:

  1. Khuyến nghị dùng UV: Dùng UV nhanh và dễ, đồng thời cũng được hỗ trợ tốt khi có vấn đề phát sinh. by screye
  2. Nhắc đến Rye: Rye hỗ trợ pinning và tải xuống Python interpreter, đồng thời có kế hoạch tích hợp với uv. by rat87
  3. Nhấn mạnh sự đơn giản của công cụ hiện tại: Môi trường Mamba và pip mặc định là đủ, không cảm thấy cần phải đổi công cụ. by helsinki
  4. Ưu tiên công cụ cơ bản: Có thể giải quyết hầu hết vấn đề bằng pip, venv và virtualenvwrapper. by throwadobe
  5. Bảo vệ việc dùng Pipenv: Đã dùng Pipenv như một giải pháp hoàn chỉnh và không hiểu vì sao nó chưa được dùng rộng rãi hơn. by routerl
  6. Vấn đề của Poetry: Poetry gây thất vọng vì các vấn đề như không thể thêm mã định danh phiên bản từ Git commit. by alisonatwork
  7. Conda và Mamba: Conda mạnh hơn nhiều trong quản lý phụ thuộc, còn Mamba thì nhanh hơn. by wanderingmind
  8. Vấn đề packaging: Vấn đề đóng gói của Python phần lớn là do yếu tố xã hội và sẽ luôn là một vấn đề. by jampekka
  9. Đề xuất thay thế Pyenv: Mise nhanh hơn Pyenv và còn hỗ trợ cả dự án Node. by odie5533
  10. Mô hình Pydantic và data class: Mô hình Pydantic có khả năng validation mạnh nhưng chậm, còn data class thì nhẹ và hiệu quả. by martinky24

Để biết thêm chi tiết, hãy xem thảo luận trên Hacker News.

5 bình luận

 
kaydash 2024-07-15

Có vẻ không có nội dung nào về việc tinh gọn thư viện. Sử dụng virtual env của miniconda3 và gỡ bỏ các lib không dùng để phân phối theo kiểu portable đã đảm bảo hiệu năng tốt hơn trong các hệ thống xử lý phân tán như yarn.

 
savvykang 2024-07-15

Tại sao nên dùng pip-tools hoặc uv? Tôi chẳng thấy có cơ sở nào cho những khẳng định kiểu “hiện đại” hay “tốt” cả.

 
savvykang 2024-07-15

Có một vấn đề là với cách pip hiện hoạt động, không thể chỉ định phiên bản build hiện tại, đó cũng là lý do cần đưa hash vào dependency specifier của pip: vấn đề không thể chỉ định phiên bản build trong hành vi hiện tại của pip. Những hướng dẫn chỉ liệt kê quy tắc mà không có bối cảnh như vậy có vẻ không mấy thuyết phục.

 
jwseo 2024-07-16

Mọi người chủ yếu dùng gì vậy??

 
savvykang 2024-07-16

Trước đây tôi chỉ làm việc với pip freeze, chọn các thư viện chỉ hỗ trợ Windows/Linux để sử dụng, và cho đến nay vẫn chưa gặp vấn đề nào phát sinh do thay đổi phiên bản vá. Dù vậy, giờ đã biết vấn đề này nên tôi hiểu sự cần thiết của nó, chỉ là có lẽ tôi sẽ cân nhắc sử dụng khi pip-tools hoặc uv trở nên trưởng thành hơn.