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

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

Phan Nhật Chánh

Chánh17 tháng 05, 2021

13 min read
·
views
·
likes

PIP là một công cụ quản lý gói Python, được sử dụng để cài đặt, nâng cấp, xóa các gói Python. PIP được tích hợp sẵn trong phiên bản Python từ 3.4 trở lên.

Với PIP, người dùng có thể cài đặt các gói Python từ PyPI (Python Package Index) và các nguồn khác. PyPI là một kho lưu trữ trực tuyến của các gói Python, cho phép người dùng tìm kiếm và cài đặt các gói này bằng PIP.

Để cài đặt một gói Python bằng PIP, người dùng chỉ cần mở terminal/command prompt và chạy lệnh pip install <package_name>install <package_name>. Tương tự, để cập nhật một gói đã được cài đặt, người dùng có thể chạy lệnh pip install --upgrade <package_name>pip install --upgrade <package_name>.

Ngoài ra, PIP còn có thể được sử dụng để cài đặt các gói từ các nguồn khác, như tệp nén hoặc git repository. PIP cũng hỗ trợ tạo và quản lý các môi trường ảo để cài đặt các gói Python riêng cho từng dự án mà không ảnh hưởng đến các dự án khác trên cùng một hệ thống.

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 pippip install pip

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

pip --version pip 20.2.3 from d:\python\lib\site-packages\pip (python 3.8)
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]) >>>
$ 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]
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.

Trong bài này chúng ta không đi sâu vào thư viện Numpy hay Pandas, ở đây chúng ta chỉ đề cập đến cách cài đặt các gói package và nạp chúng. Nếu cần, ta sẽ nói về các gói khác nhau trong các phần khác.

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)
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()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
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
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

Chúng ta sử dụng phương thức response.json()response.json() từ response object, nếu chúng ta đang tìm nạp dữ liệu JSON. Đối với các định dạng như txt, html, xml và các file có định dạng khác, chúng ta có thể sử dụng response.text

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 packagenamepip 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 listpip list

Thông tin của một Package

Câu lệnh pip show packagenamepip 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:
$ 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 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
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/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!'
# 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:

Package Folder
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!' >>>
$ 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 SQLAlchemypip 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 djangopip install django): thư viện tạo trang web chuyên nghiệp (pip install django)
    • Flask (pip install flaskpip install flask): một thư viện tạo trang web bằng Python dựa trên Werkzeug, Jinja 2. (pip install flaskpip install flask)
  • HTML Parser
    • Beautiful Soup (pip install beautifulsoup4pip 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 requestspip 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.