Python PIP - Quản lý các Package trong Python

Trong phần này, chúng ta sẽ tìm hiểu xem pip là gì? Cách sử dụng và cài đặt pip như thế nào cũng như cách bạn tạo ra một gói package cơ bản như thế nào và tìm hiểu thêm một số thư viện được sử dụng phổ biến trong python.

PIP là gì?

PIP là viết tắt của cụm từ Preferred Installer Program một trình quản lý các gói (package) nó là một module trong python có thể chứa một hoặc nhiều các module khác hoặc các package khác. Module hoặc các module mà bạn cài đặt vào ứng dụng của bạn được gọi là một package. Trong lập trình, chúng ta không thể nào viết mọi chương trình tiện ích để sử dụng, thay vào đó chúng ta có thể cài đặt các package và import chúng vào ứng dụng của mình. Để cài đặt các package bạn sẽ sử dụng pip.

Cài đặt PIP như thế nào?

Nếu bạn chưa cài đặt pip, hãy cài đặt nó bằng cách mở terminal hoặc command prompt trên máy tính của bạn và chạy lệnh: pip install pip

Kiểm tra xem pip đã được cài đặt chưa bằng cách viết pip --version

$ pip --version
pip 20.2.3 from d:\python\lib\site-packages\pip (python 3.8)

Như bạn có thể thấy, tôi đang sử dụng phiên bản pip 20.2.3, nếu bạn thấy một số con số nhỏ hơn hoặc cao hơn một chút, có nghĩa là máy tính của bạn cũng đã cài đặt pip thành công.

Install Package

Có rất nhiều các package có sẵn được sử dụng phổ biến trong cộng đồng python cho các mục đích khác nhau, dưới đây là một số package phổ biến nhất bạn có thể cài đặt và thử sử dụng chúng.

numpy

Hãy thử cài đặt numpy (được gọi là numeric python). Nó là một trong những package phổ biến nhất trong cộng đồng machine learning (học máy) và data science (khoa học dữ liệu).

Numpy là một thư viện toán học phổ biến và mạnh mẽ của Python. Để cài đặt numpy bạn chạy lệnh pip install numpy

Hãy bắt đầu sử dụng numpy. Bạn có thể sử dụng terminal, google colab hoặc cài đặt jupyter notebook để thử chạy một ví dụ đơn giản sử dụng numpy như sau:

$ python
Python 3.8.5 (tags/v3.8.5:580fbb0, Jul 20 2020, 15:43:08) [MSC v.1926 32 bit (In
tel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
>>> numpy.version.version
'1.19.2'
>>> lst = [1, 2, 3,4, 5]
>>> np_arr = numpy.array(lst)
>>> np_arr
array([1, 2, 3, 4, 5])
>>> len(np_arr)
5
>>> np_arr * 2
array([ 2,  4,  6,  8, 10])
>>> np_arr  + 2
array([3, 4, 5, 6, 7])
>>>
import numpy
numpy.version.version
lst = [1, 2, 3, 4, 5]
np_arr = numpy.array(lst)
np_arr

print(len(np_arr)) # 5
print(np_arr * 2) # [ 2  4  6  8 10]
print(np_arr + 2) # [3 4 5 6 7]

pandas

Pandas là một thư viện mã nguồn mở, dễ sử dụng và các công cụ phân tích dữ liệu cho ngôn ngữ lập trình Python. Bạn có thể tham khảo bài viết sử dụng Pandas cơ bản mà tôi đã trình bày tại đây để cài đặt và sử dụng.

webbrowser

Hãy import một module có tên webbrowser, module này có thể giúp bạn mở bất kỳ trang web nào. Nếu bạn đang sử dụng python3 thì đây là module được cài đặt sẵn. Ví dụ: nếu bạn muốn mở bất kỳ một hay nhiều trang web nào đó hoặc nếu bạn muốn lên lịch trình gì đó, module này có thể giúp bạn. Xem tài liệu về webbrowser.

import webbrowser # import thư viện

# danh sách các url
url_lists = [
    'http://www.python.org',
    'https://phannhatchanh.com',
    'https://google.com',
]

# mở danh sách các trang web ở trên trong tab khác
for url in url_lists:
    webbrowser.open_new_tab(url)

requests

Bạn đã được làm quen với cách đọc, ghi dữ liệu trong file trên máy tính cục bộ local. Đôi khi, chúng tôi muốn đọc dữ liệu từ một trang web sử dụng url hoặc API (Application Program Interface). Nó là một thư viện để trao đổi dữ liệu có cấu trúc giữa các máy chủ chủ yếu dưới dạng dữ liệu json. Để kết nối với các url, chúng ta cần một package có tên requests - nó cho phép mở và kết nối để thực hiện các hoạt động CRUD như (tạo, đọc, cập nhật và xóa). Trong phần này, chúng ta chỉ đề cập đến việc đọc dữ liệu.

Chúng ta sẽ sử dụng các phương thức get, status_code, headers, textjson trong module requests:

  • get(): kết nối, tìm và nạp dữ liệu từ url - nó trả về một object.
  • status_code: Sau khi tìm nạp dữ liệu, ta có thể kiểm tra trạng thái của hoạt động (succes, error,...)
  • headers: thông tin header headers={"content-type":"text"}
  • text: Trích xuất văn bản từ object được trả về.
  • json: Trích xuất dữ liệu json.

Hãy đọc một file có phần mở rộng .txt ở trang web này: https://www.w3.org/TR/PNG/iso_8859-1.txt.

import requests # import request module

url = 'https://www.w3.org/TR/PNG/iso_8859-1.txt' # text từ một trang web

response = requests.get(url) # mở mạng và tìm nạp dữ liệu
print(response)
print(response.status_code)  # trạng thái, success:200
print(response.headers)      # thônh tin headers
print(response.text)         # trả về tất cả văn bản

API là phương thức, giao thức dùng để trao đổi dữ liệu có cấu trúc giữa các máy chủ chủ yếu là dữ liệu dạng json. Ví dụ về api: https://restcountries.eu/rest/v2/all. Hãy đọc API này bằng cách sử dụng requests module.

import requests
url = 'https://restcountries.eu/rest/v2/all'
response = requests.get(url)
print(response)
print(response.status_code)  # trạng thái, success:200
countries = response.json()  # trả về dạng json
print(countries[:1])         # chỉ lấy những nước đầu tiên

Uninstall Package

Nếu bạn không muốn giữ lại các gói package đã được cài đặt, bạn có thể gỡ bỏ chúng bằng cách pip uninstall packagename.

Danh sách các Packages đã cài

Để xem các gói package đã được cài đặt trên máy tính của bạn. Bạn có thể theo dõi các gói đã cài bằng cách pip list

Thông tin của một Package

Câu lệnh pip show packagename sẽ hiển thị thông tin về một gói package mà bạn muốn.

$ pip show pandas
Name: pandas
Version: 1.1.2
Summary: Powerful data structures for data analysis, time series, and statistics

Home-page: https://pandas.pydata.org
Author: None
Author-email: None
License: BSD
Location: d:\python\lib\site-packages
Requires: python-dateutil, numpy, pytz
Required-by:

Nếu bạn muốn hiển thị thông tin của một package chi tiết hơn, chỉ cần thêm --verbose

$ pip show --verbose pandas
Name: pandas
Version: 1.1.2
Summary: Powerful data structures for data analysis, time series, and statistics

Home-page: https://pandas.pydata.org
Author: None
Author-email: None
License: BSD
Location: d:\python\lib\site-packages
Requires: pytz, python-dateutil, numpy
Required-by:
Metadata-Version: 2.1
Installer: pip
Classifiers:
  Development Status :: 5 - Production/Stable
  Environment :: Console
  Operating System :: OS Independent
  Intended Audience :: Science/Research
  Programming Language :: Python
  Programming Language :: Python :: 3
  Programming Language :: Python :: 3.6
  Programming Language :: Python :: 3.7
  Programming Language :: Python :: 3.8
  Programming Language :: Cython
  Topic :: Scientific/Engineering
Entry-points:
  [pandas_plotting_backends]
  matplotlib = pandas:plotting._matplotlib

pip freeze

Hiển thị các package đã được sử dụng trong dự án của bạn. Tham khảo thêm bài viết Thiết lập môi trường ảo Virtual Environment trong Python.

$ pip freeze
docutils==0.11
Jinja2==2.7.2
MarkupSafe==0.19
Pygments==1.6
Sphinx==1.2.2

Tạo một Package

Như bạn đã biết, một module có thể chứa nhiều đối tượng, chẳng hạn như các lớp, hàm,... Một package có thể chứa một hoặc nhiều module liên quan. Nó thực sự là một thư mục chứa một hoặc nhiều file nhỏ. Bây giờ, thử tạo một package có tên là mypackage bằng cách thực hiện theo các bước sau:

Đầu tiên, hãy tạo một thư mục mới có tên mypacakge bên trong thư mục dự án của bạn. Tiếp theo, tạo một file có tên __init__.py trống trong thư mục mypackage. Kế đến, tạo 2 file có tên là arithmetic.pywelcome.py bằng đoạn code sau:

# mypackage/arithmetics.py
# arithmetics.py
def add_numbers(*args):
    total = 0
    for num in args:
        total += num
    return total

def subtract(a, b):
    return (a - b)

def multiple(a, b):
    return a * b

def division(a, b):
    return a / b

def remainder(a, b):
    return a % b

def power(a, b):
    return a ** b
# mypackage/greet.py
# greet.py
def greet_person(firstname, lastname):
    return f'{firstname} {lastname}, welcome to PythonClassic Challenge!'

Cấu trúc thư mục gói package của bạn sẽ giống như sau:

─ mypackage
    ├── __init__.py
    ├── arithmetic.py
    └── greet.py

Như vậy là bạn đã vừa tạo package đơn giản bằng ngôn ngữ python (tham khảo thêm cách sử dụng function trong python). Bây giờ, hãy mở terminal và thử sử dụng nó:

$ python
Python 3.7.5 (default, Nov  1 2019, 02:16:32)
[Clang 11.0.0 (clang-1100.0.33.8)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from mypackage import arithmetics
>>> arithmetics.add_numbers(1,2,3,5)
11
>>> arithmetics.subtract(5, 3)
2
>>> arithmetics.multiple(5, 3)
15
>>> arithmetics.division(5, 3)
1.6666666666666667
>>> arithmetics.remainder(5, 3)
2
>>> arithmetics.power(5, 3)
125
>>> from mypackage import greet
>>> greet.greet_person('Chanh', 'Phan Nhat')
'Chanh Phan Nhat, welcome to PythonBassic Challenge!'
>>>

Như bạn có thể thấy package của chúng ta hoạt động hoàn hảo. Thư mục của package chứa một file đặc biệt có tên là __init__.py - file này có nhiệm vụ sẽ lưu trữ nội dung của package. Nếu chúng ta đặt __init__.py trong thư mục package, python bắt đầu nhận ra nó là một gói. __init__.py hiển thị các tài nguyên được chỉ định từ các module của nó để được import vào các file python khác. Tóm lại để tạo một package là cần phải có tệp __init__.py để nó nhận dạng thư mục chứa nó là một package.

Một số Package khác

Dưới đây là một số package mà bạn cũng nên tìm hiểu trên con đường học tập ngôn ngữ python của chính mình

  • Database

    • SQLAlchemy (pip install SQLAlchemy): cung cấp cho các nhà phát triển ứng dụng toàn bộ sức mạnh và tính linh hoạt của SQL.
    • SQLObject: là một ORM (Object Relational Manager) phổ biến cung cấp giao diện đối tượng cho cơ sở dữ liệu của bạn.
  • Web Development

    • Django (pip install django): thư viện tạo trang web chuyên nghiệp (pip install django)
    • Flask (pip install flask): một thư viện tạo trang web bằng Python dựa trên Werkzeug, Jinja 2. (pip install flask)
  • HTML Parser

    • Beautiful Soup (pip install beautifulsoup4): phân tích cú pháp HTML / XML được thiết kế cho các dự án screen-scraping.
    • PyQuery - triển khai jQuery bằng Python; rõ ràng là nhanh hơn BeautifulSoup.
  • XML Processing

    • ElementTree là một API được sử dụng để làm việc với các file XML một cách dễ dàng. (Python 2.5 trở lên có ElementTree trong Thư viện chuẩn)
  • GUI (Giao diện người dùng)

    • PyQt: một trong những thư viện GUI đa nền tảng mạnh mẽ và phổ biến nhất.
    • tkinter: bộ công cụ tạoo giao diện người dùng truyền thống.
  • Data Analysis, Data Science và Machine learning

    • Numpy: được biết đến là một trong những thư viện machine learning phổ biến nhất trong Python.
    • Pandas: là một thư viện cung cấp các cấu trúc dữ liệu cấp cao và tích hợp nhiều công cụ để phân tích dữ liệu trong python.
    • SciPy: chứa các module dùng để tối ưu hóa, đại số tuyến tính, tích hợp, xử lý hình ảnh và thống kê.
    • Scikit-Learn: được coi là một trong những thư viện tốt nhất để làm việc với dữ liệu phức tạp.
    • TensorFlow: là một thư viện machine learning do Google xây dựng.
    • Keras: được coi là một trong những thư viện machine learning thú vị nhất trong Python. Nó cung cấp một cơ chế dễ dàng hơn để thể hiện mạng nơ-ron. Keras cũng cung cấp một số tiện ích tốt nhất để biên dịch mô hình, xử lý tập dữ liệu, trực quan hóa đồ thị và nhiều hơn thế nữa.
  • Network

    • requests (pip install requests): là một package mà chúng ta có thể sử dụng để gửi yêu cầu đến máy chủ (GET, POST, DELETE, PUT)
  • Others

    • word2number là một mô-đun Python dùng để chuyển đổi các từ số (ví dụ: twenty one thành số 21). Nó hoạt động cho các số dương lên đến 999.999.999.999

Bài tập

  1. Đọc url Romeo_and_juliet = 'http://www.gutenberg.org/files/1112/1112.txt' và tìm 10 từ thường gặp nhất.
  2. Đọc api cats_api = 'https://api.thecatapi.com/v1/breeds' và tìm trọng lượng trung bình của một con mèo theo đơn vị (mét).
  3. Đọc api countries = 'https://restcountries.eu/rest/v2/all' và tìm 5 quốc gia cuối cùng.
  4. UCI (Đại học California Irvine Mỹ) là một trong những nơi phổ biến nhất để lấy bộ dữ liệu cho data sciencemachine learning. Hãy sử dụng BeautifulSoup4 để lấy dữ liệu từ url http://archive.ics.uci.edu/ml/datasets.php.

Đăng ký nhận bản tin!

Tôi sẽ gửi một email cho bạn khi tôi tạo ra một cái gì đó mới. Tôi sẽ không bao giờ gửi thư rác cho bạn 🙅‍♂️! và bạn có thể hủy đăng ký bất kỳ lúc nào.
© 2019-2021 Phan Nhật Chánh