/ Python

Những Python Packages yêu thích của tôi

Sau đây là một số gói tâm đắc mà tôi hay dùng. Tôi sẽ không nói tới những gói thuộc về framework như Flask, Django mà tập trung vào những gói phụ trợ xài trong nhiều trường hợp.

Requests: HTTP for Humans

Link: http://docs.python-requests.org/en/master/

Những năm này, cùng với việc phát triển của các thiết bị mobile, người ta làm Web API rất nhiều. Gói này giúp bạn lấy dữ liệu từ API rất dễ dàng, tiêu chuẩn và nhiều chức năng.

Tôi cũng thường sử dụng gói này khi viết các crawlers lấy dữ liệu từ các trang web khác. Bạn có thể sử dụng cookies để đăng nhập và truy cập những nội dung chỉ dành cho thành viên một cách nhẹ nhàng tình cảm.

>>> url = 'http://httpbin.org/cookies'
>>> cookies = dict(cookies_are='working')

>>> r = requests.get(url, cookies=cookies)
>>> r.text
'{"cookies": {"cookies_are": "working"}}'

Django Rest Framework (DRF)

Link: http://www.django-rest-framework.org/

Gói phụ trợ nổi tiếng nhất dành cho Django, cũng là lý do để nhiều lập trình viên chọn Django là framework chính của họ. Tác giả gói này là Tom Christie, anh đã thực hiện gây quỹ trên Kickstarter khi phát triển lên phiên bản 3.

Điểm nổi bật nhất của DRF là sự thân thiện trong môi trường phát triển. Nó hỗ trợ xem trước API dưới giao diện web khi truy cập bằng trình duyệt thông thường. Ngoài ra, nó cũng thể hiện sự linh hoạt tuyệt vời khi kết hợp với Django ORM đẩy nhanh tốc độ phát triển dự án.

Arrow: better dates and times for Python

Link: http://crsmithdev.com/arrow/

Trước khi có gói này, tôi thường cảm thấy rất mất hứng mỗi khi tới phần xử lý ngày tháng. Thao tác với ngày tháng trong Python có thể nói là một trong những công việc rất dễ bị rối. Nào là chuyển qua lại giữa chuỗi <-> datetime, formating, vấn đề timezone, shifting, so sánh...

arrow.get() là một hàm tương đối thông minh. Nó cho phép bạn chuyển 1 chuỗi, 1 datetime object thành Arrow object. Từ đó bạn có thể tiếp tục thao tác với các phương thức hữu ích mà gói cung cấp.

>>> arrow.get(2016, 12, 24)
<Arrow [2016-12-24T00:00:00+00:00]>

>>> arrow.get('2016/12/24')
<Arrow [2016-12-24T00:00:00+00:00]>

>>> arrow.get('2016-12-24').to('Asia/Saigon').floor('day').replace(hours=+23, minutes=+59)
<Arrow [2016-12-24T23:59:00+07:00]>

Celery: Distributed Task Queue

Link: http://www.celeryproject.org/

Celery trong tiếng Việt là cần tây. Cây này rất tốt cho người bị cao huyết áp, còn bình thường thì xào chung với thịt bò.

Tôi xài gói này cho 2 nhiệm vụ chính: async tasks và cron jobs. Với celery bạn có thể tăng hiệu quả làm việc của máy chủ lên cao hơn, website sẽ chạy mượt mà hơn mà vẫn đảm bảo đáp ứng được lượng truy cập lớn.

Scrapy: A fast high-level screen scraping and web crawling framework

Link: http://scrapy.org/

Giả sử website của bạn cần phải cào nội dung của 200 trang web khác. Cấu trúc của các trang đích lâu lâu lại đổi một lần làm cho dữ liệu website của bạn bị gián đoạn. Vậy cách nào để sửa code nhanh nhất, đảm bảo dịch vụ luôn vận hành trơn tru? Câu trả lời chính là tên của cái gói này.

Pygments: Python syntax highlighter

Link: http://pygments.org/

Khác với các syntax highlighters khác thường được viết trên Javascript, Pygments xử lý việc phân tách mã cần làm nổi bật ngay tại backend. Sau đó, bạn chỉ cần chèn một file CSS vào phần frontend để highlight cho những đoạn mã muốn hiển thị. Chỉ cần một file CSS cho tất cả các ngôn ngữ.

Pygments giúp tốc độ render tại trình duyệt tốt lên đáng kể, nhất là đối với những trang web nặng về hiển thị code. Github có lẽ là dịch vụ lớn nhất sử dụng Pygments dù nó được viết bằng Ruby.

Lời Kết

Tùy theo mỗi lập trình viên hoạt động trong lĩnh vực nào mà những gói thường sử dụng của họ cũng thay đổi theo. Bởi vậy nên có lẽ nhiều bạn của tôi sẽ nói rằng numpy hoặc nltk nên là gói đáng được đưa lên đầu tiên. Nhưng mà, kệ mợ các bạn, đây là bài viết của tôi.

Tôi làm việc với ngôn ngữ lập trình Python đã hơn 8 năm. Chưa làm được gì lớn lao, cũng chưa đạt tới trình độ thượng thừa, nhưng tôi yêu ngôn ngữ này và sẽ tiếp tục gắn bó.