Các thực hành hiện đại tốt nhất cho Python của Stuart Ellis
(stuartellis.name)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-randomly và pytest-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 choos.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
- Sử dụng tệp
pyproject.toml: PEP 517, PEP 518, PEP 621, PEP 660. - Dùng bố cục src: so sánh bố cục src và bố cục phẳng.
- Dùng môi trường ảo khi phát triển: khuyến nghị venv, PDM, Hatch, Mise.
- Dùng requirements file để cài package: dùng pip-compile thông qua pip-tools hoặc uv.
Để 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:
- 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
- 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
- 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
- Ư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
- 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
- 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
- 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
- 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
- Đề xuất thay thế Pyenv: Mise nhanh hơn Pyenv và còn hỗ trợ cả dự án Node. by odie5533
- 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
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.
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ả.
Có một vấn đề là với cách
piphiệ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.Mọi người chủ yếu dùng gì vậy??
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 khipip-toolshoặcuvtrở nên trưởng thành hơn.