paint-brush
Đánh giá sách: Công cụ Python siêu hiện đại của Claudio Jolowicztừ tác giả@usetech
648 lượt đọc
648 lượt đọc

Đánh giá sách: Công cụ Python siêu hiện đại của Claudio Jolowicz

từ tác giả Usetech 7m2023/09/28
Read on Terminal Reader

dài quá đọc không nổi

"Công cụ Python siêu hiện đại" của Claudio Jolowicz là một cuốn sách sắp xuất bản, dự kiến phát hành vào tháng 4 năm 2024, cung cấp hướng dẫn toàn diện về công cụ phát triển Python. Nó bao gồm các chủ đề trước đây nằm rải rác trên nhiều nguồn khác nhau, cung cấp những hiểu biết sâu sắc về cách cài đặt Python, quản lý môi trường, gói, phần phụ thuộc và thử nghiệm. Cuốn sách giới thiệu các công cụ chính như pipx và thơ, tập trung vào cách sử dụng thực tế và các lựa chọn thay thế trong hệ sinh thái Python. Mặc dù nó mang lại nhiều thông tin nhưng một số độc giả có thể thấy nó hơi khó hiểu ở một số chỗ và mong muốn có thêm những ví dụ không tầm thường. Nó cũng thiếu phạm vi đề cập đến một số chủ đề nhất định như trình quản lý gói Windows, xây dựng Python từ nguồn trên Unix, chạy Python trong bộ chứa Docker, tạo tệp .exe trên Windows, các phương pháp phân phối dự án thay thế và linters. Mặc dù vậy, nó vẫn được khuyến khích dành cho những người đam mê Python đang tìm kiếm một nguồn tài nguyên toàn diện.
featured image - Đánh giá sách: Công cụ Python siêu hiện đại của Claudio Jolowicz
Usetech  HackerNoon profile picture
0-item



Tôi đã có cơ hội đọc phiên bản đầu tiên của “Hypermodern Python Tooling” của Claudio Jolowicz, dự kiến phát hành vào tháng 4 năm 2024. Tôi đã đọc phiên bản tháng 6 năm 2023 và có động lực viết bài đánh giá vì tôi chưa tìm thấy cuốn sách nào về chủ đề này trước đây.


Nguồn: O'Reilly Media, Inc.


Các chủ đề trong cuốn sách trước đây chỉ có trong các video hội nghị, bài viết kỹ thuật và hướng dẫn, tùy thuộc vào việc ai thấy thoải mái hơn với loại nội dung nào. Theo tôi, các nguồn khác nếu có chú ý đến những vấn đề này thì rất hời hợt. Nó thường kết thúc bằng nhiều biến thể khác nhau của việc cài đặt trình thông dịch Python .


Tính đến tháng 6 năm 2023, cuốn sách truy cập sớm có 7 phần:


  • Cài đặt Python;
  • Môi trường trong Python;
  • Các gói bằng Python;
  • Quản lý phụ thuộc;
  • Theo dõi bằng thơ;
  • Thử nghiệm với Pytest;
  • Đo mức độ phù hợp với Coverage.py


Tổng quan về các phần sách

Phần đầu tiên mô tả chu kỳ phát hành phiên bản Python. Nó mô tả các phương pháp cài đặt khác nhau cho các hệ điều hành khác nhau: Windows, Linux , macOS, việc sử dụng pyenv để cài đặt nhiều phiên bản trình thông dịch Python, không chỉ dựa trên CPython mà còn cả PyPy, IronPython, Jython, Pyston và các phiên bản khác. Một ví dụ về việc sử dụng pylauncher, cũng dành cho hệ thống Unix, được đưa ra. Ngoài ra, một ví dụ về cài đặt bằng Anaconda được đưa ra.


Phần thứ hai thảo luận về cách tổ chức môi trường Python: trình thông dịch, tập lệnh điểm vào, mô-đun (bao gồm cả thư viện chuẩn và mô-đun của bên thứ ba) và thư viện dùng chung (chứa mã tùy chỉnh được biên dịch từ các ngôn ngữ cấp thấp như C). Việc sử dụng môi trường ảo, có thể được tạo bằng mô-đun venv tích hợp được giới thiệu trong Python3, cũng như sự khác biệt trong việc kích hoạt chúng cho các hệ điều hành khác nhau. Trình quản lý gói được giới thiệu, cả pip tích hợp và pipx của bên thứ ba. Thông tin chung về cách tìm kiếm các mô-đun được đưa ra.


Phần thứ ba giới thiệu chỉ mục gói Python. Chúng tôi đưa ra một ví dụ về một tập lệnh đơn giản và hiển thị toàn bộ quy trình làm việc từ việc tạo dự án đến tải nó vào cả chỉ mục gói thử nghiệm và gói thực. Tệp pyproject.toml được sử dụng để chỉ định thông tin meta khi xây dựng gói ứng dụng. Công cụ quản lý dự án hiện đại và tuân thủ tiêu chuẩn (https://hatch.pypa.io/latest/) được sử dụng làm chương trình phụ trợ xây dựng. Công cụ tải lên PyPI chính thức: Twine được sử dụng làm công cụ tải gói lên. Các tùy chọn gói được liệt kê: sdists và bánh xe. Danh sách các trường thiết yếu nhất có thông tin meta trong tệp pyproject.toml cho một dự án được đưa ra.


Phần thứ tư có lẽ nêu ra vấn đề mơ hồ nhất: vấn đề quản lý sự phụ thuộc trong một dự án. Có hai tùy chọn: require.txt với các biến thể và kết hợp có thể có và pyproject.toml. Điều đáng ngạc nhiên là ở đây sẽ không có câu chuyện về thơ nhưng việc mô tả nó sẽ không dài ở phần thứ năm. Thật thú vị khi tìm hiểu về sự tồn tại của một công cụ tạo ra cái gọi là quỹ tích phụ thuộc bằng cách sử dụng công cụ pip-tools.

Phần thứ năm đề cập đến bài thơ nổi tiếng, cung cấp một công cụ tự động cho các tác vụ thông thường: quản lý phụ thuộc, tạo gói và xuất bản gói đó trong chỉ mục gói, v.v. Sự khác biệt đối với pyproject được mô tả. Chúng tôi mô tả sự khác biệt trong pyproject.toml so với những gì đã được mô tả trong các chương trước khi chúng tôi làm quen với cú pháp của nó. Có những lựa chọn thay thế cho thơ trong hệ sinh thái Python, chẳng hạn như nở và trưởng thành.

Phần sáu mô tả một kmb ngắn (khóa học dành cho võ sĩ trẻ) về thử nghiệm với các phần tử tái cấu trúc dành cho các nhà phát triển Python, đề cập đến hai khung thử nghiệm: unittest và pytest. Đây là những điều cơ bản, nhưng các nguồn khác với mô tả chi tiết hơn về chủ đề cũng được cung cấp để bạn tìm hiểu. Điều duy nhất không được đề cập là mũi, nhưng trên thực tế, pytest trên thực tế đã dẫn đầu trong những năm gần đây. Trong trường hợp có các ràng buộc phụ thuộc, sự lựa chọn là hiển nhiên: unittest. Một ví dụ về mã tái cấu trúc nhỏ để tạo cơ sở linh hoạt hơn cho việc hỗ trợ mã trong tương lai và đơn giản hóa việc kiểm tra được đưa ra.


Trong phần thứ bảy , chúng ta thảo luận về vấn đề phạm vi kiểm tra bằng cách sử dụng mô-đun theo dõi tiêu chuẩn cũng như mô-đun phạm vi bao phủ của bên thứ ba. Tuy nhiên, bạn vẫn nên sử dụng mô-đun của bên thứ ba, mô-đun này có thể chạy trên các phiên bản khác nhau của trình thông dịch Python, sau đó nhận báo cáo tổng hợp về mức độ bao phủ mã bằng cách thực hiện theo quy trình chạy phạm vi quy tắc → kết hợp phạm vi bảo hiểm → báo cáo mức độ phù hợp. Cuối cùng, mọi người đều phải đối mặt với một tình huống khó xử tại một thời điểm nào đó trong dự án: “Để kiểm tra, bạn cần cấu trúc lại mã; nhưng tái cấu trúc mà không kiểm tra thì quá rủi ro”.


Ở đây, rất có thể, mọi thứ sẽ phụ thuộc vào bản thân dự án, phạm vi của nó, chất lượng của mã và tính sẵn có của các thử nghiệm tương tự. Đối với tôi, có vẻ như bạn nên thực hiện theo cách thực dụng và không phải lúc nào bạn cũng không nên đạt được mức tham chiếu 100%, điều đó thường không bắt buộc. Rất có thể, tại thời điểm đọc bài này, chương tự động hóa toàn bộ câu chuyện bằng công cụ Nox vẫn chưa sẵn sàng.


Trước khi tóm tắt, chúng ta hãy cài đặt pipx và thử sử dụng nó.


PIPX đang hoạt động

Trên trang web chính thức, các nhà phát triển công cụ định vị nó như thế này:

“Tổng quan: Pipx là gì?


pipx là một công cụ giúp bạn cài đặt và chạy các ứng dụng dành cho người dùng cuối được viết bằng Python. Nó gần giống với brew của macOS, npx của JavaScript và apt của Linux.


Nó liên quan chặt chẽ đến pip. Trên thực tế, nó sử dụng pip nhưng tập trung vào việc cài đặt và quản lý các gói Python có thể chạy trực tiếp từ dòng lệnh dưới dạng ứng dụng.”


Thật là một tin tuyệt vời nếu gói này cũng đi kèm với giao diện CLI , vì nó có thể chạy trực tiếp gói mong muốn chỉ bằng một lệnh duy nhất mà không cần cài đặt trước. Xin chào công cụ npx từ thế giới NodeJS;)

Sau khi cài đặt pipx cục bộ, hãy chạy 5 dự án nhỏ để xem nó nhanh và dễ dàng như thế nào.


  1. Tiện ích tạo file âm thanh từ văn bản google-speech


Trong bảng điều khiển, hãy chạy lệnh sau: $ pipx run google-speech -l en -o hello_world.mp3 "Hello, world!"


Trong trường hợp này, tệp hello_world.mp3 được tạo trong thư mục nơi lệnh được thực thi và có thể được nghe bằng trình phát đa phương tiện.



  1. Tiện ích tính tổng kiểm tra file và thư mục chksum-cli


Trong bảng điều khiển, hãy chạy lệnh sau: $ pipx run chksum-cli ./hello_world.mp3 b754e299a96327caaddd44b453f66ed9439c5d64d0d6e55c7e32471115757e5e sha256


Kết quả sẽ được hiển thị cho dù tổng kiểm tra của các tệp có khớp hay không.


  1. Tiện ích gửi yêu cầu qua giao thức HTTP httpy-cli


Trong bảng điều khiển, chạy lệnh sau: $ pipx run httpy-cli mail.ru


Một phản hồi HTTP có tiêu đề và nội dung yêu cầu sẽ được xuất ra.



  1. Tiện ích hiển thị đồng hồ đồ họa giả trong bảng điều khiển với khả năng đặt hẹn giờ theo thời gian


Trong bảng điều khiển, chạy lệnh sau: $ pipx run timy-cli -с


Một đồng hồ analog sẽ được hiển thị với khả năng dừng nó bằng cách sử dụng tổ hợp phím CTRL + C.



  1. Trò chơi cờ vua trên bảng điều khiển với khả năng chơi cờ vua trên mạng


Trong bảng điều khiển, chạy lệnh sau: $ pipx run cli-chess


Một menu để chọn loại trò chơi sẽ bắt đầu:




Để xem các tùy chọn bổ sung, bạn có thể thêm phím --help vào các lệnh trên.


Ấn tượng về cuốn sách


Nhìn chung, cuốn sách dễ đọc nhưng có nhiều chỗ hơi khó hiểu. Có lẽ nó thiếu một số ví dụ không tầm thường. Cuốn sách mô tả một tập lệnh mẫu để lấy một bài viết ngẫu nhiên từ Wikipedia.


Những gì tôi thích:


Cá nhân tôi phát hiện ra công cụ pipx (tương tự như npx trong thế giới Node.js), rất tiện dụng khi bạn cần nhanh chóng làm quen với thứ gì đó và xem qua. Đặc biệt tốt cho các dự án có giao diện cli để chạy;


Thật thú vị khi biết rằng có những lựa chọn thay thế cho thơ (https://python-poetry.org/), chẳng hạn như Hatch (https://hatch.pypa.io/latest/) và maturin (https://www. trưởng thành.rs/);


Ví dụ về việc sử dụng backport cho các phiên bản khác nhau của trình thông dịch Python; ví dụ: importlib_metadata được sử dụng làm backport cho Python3.7, trái ngược với importlib.metadata cho Python3.8. Mã mẫu từ cuốn sách:


try:

from importlib.metadata import metadata

except ImportError:

from importlib_metadata import metadata


Những gì tôi nghĩ là còn thiếu trong cuốn sách:


Không bao gồm tùy chọn sử dụng trình quản lý gói để cài đặt Python trên dòng hệ điều hành Windows, chẳng hạn như chocolatey (https://chocolatey.org/);


Cách xây dựng Python từ nguồn cho các bản phân phối Unix không được đề cập;


Không có cách nào để chạy Python trong vùng chứa Docker. Hiện nay có rất nhiều bản dựng, bắt đầu từ bản tối giản nhất dựa trên núi cao;


Không được coi là cách để đưa dự án chạy tệp .exe thực thi trong Windows (trong thực tế của tôi đã có một trường hợp như vậy. Có, tôi đồng ý rằng đó là một nhiệm vụ rất thích hợp, nhưng vẫn vậy);

Không có ví dụ về phân phối dự án thay thế, ví dụ: sử dụng trình quản lý gói tiêu chuẩn apt cho các bản phân phối giống Debian với sự trợ giúp của setuptools và dh-virtualenv với việc hình thành gói *.deb);


Không có chương nào mô tả các linters như pylint,flake8, isort, black, mypy, pyright, v.v.


Nhưng đây là ý kiến chủ quan của tôi, có thể bạn sẽ không đồng ý.

Mặc dù thực tế là cuốn sách vẫn chưa có phiên bản cuối cùng (dự kiến phát hành vào tháng 4 năm 2024), tôi có thể giới thiệu nó cho bất kỳ ai quan tâm đến Python.


Tác giả: Daniil Nikitin, Nhà phát triển phần mềm cao cấp tại Usetech