Python – Packages

Package Python là một tập các module có chung một mục đích, chức năng. Đường dẫn của package phải có 1 file đặc biệt __init__.py. (Kể từ Python 3.3, không yêu cầu __init__.py để định nghĩa đường dẫn package). Module Python là 1 file *.py.
Khi xử lí các project lớn gồm hàng trăm, hàng nghìn module => việc sử dụng package là quan trọng. Ví dụ: chúng ta có thể gom tất cả module xử lí database vào package database và user interface code đặt trong package ui.

Built-in packages được đặt trong đường dẫn đã define. Ví dụ: /usr/lib/python3.7 trên Linux, c:\Users\Dell\AppData\Local\Programs\Python\Python37\Lib\site-packages trên Windows
Third-party package được installed vào đường dẫn sau. Ví dụ: c:\Users\Dell\AppData\Local\Programs\Python\Python37\Lib trên Windows

Quản lý package Python

Chúng ta sử dụng Python package manager ‘pip’ để quản lí (install/uninstall) package Python

pip install arrow

Run command này trên cmd/terminal để install package arrow

pip uninstall arrow

Run command này trên cmd/terminal để uninstall package arrow

Package Python với empty __init__.py

Ví dụ 1: Tạo simple package
Chúng ta tạo simple package trong Python với cấu trúc folder như sau:
.
├── mymath
│ ├── __init__.py
│ └── mfuns.py
└── myprog.py

__init__.py

from .mfuns import mycube

Trong file __init__.py, chúng ta import function mycube từ module mfuncs.
Line of code này giúp chúng ta không cần chỉ định trên module khi gọi function mycube() từ 1 module (*.py) khác ngoài package mymath.

mfuns.py

def mycube(x):
   return x * x * x 

Chúng ta định nghĩa hàm tính lập phương x

myprog.py

from mymath import mycube

print(mycube(3))

Trong module myprog, chúng ta import function mycube, và chúng ta không cần chỉ định tên module để refer tới function mycube

Kết quả:
c:\Users\Dell>python myprog.py
27

Package Python không có __init__.py

Kể từ Python-3.3, chúng ta có thể định nghĩa package mà không cần có file __init__.py

Ví dụ 2: import package
Tạo package theo cấu trúc folder dưới đây
├── constants
│ ├── data.py
└── read.py

data.py

colours = ('yellow', 'blue', 'red', 'orange', 'brown')
names = ('Jack', 'Jessica', 'Robert', 'Lucy', 'Tom')

Trong file data.py, định nghĩa 2 tuple

read.py

from constants.data import colours
import constants.data as mydata

print(colours)
print(mydata.names)

Kết quả:
c:\Users\Dell>python read.py
(‘yellow’, ‘blue’, ‘red’, ‘orange’, ‘brown’)
(‘Jack’, ‘Jessica’, ‘Robert’, ‘Lucy’, ‘Tom’)

Package ‘arrow’

‘arrow’ package là third-party xử lí date time trong Python

c:\Users\Dell\AppData\Local\Programs\Python\Python37\Lib\site-packages\arrow>tree /f /a
Folder PATH listing
Volume serial number is C07F-8319
C:.
|   api.py
|   arrow.py
|   constants.py
|   factory.py
|   formatter.py
|   locales.py
|   parser.py
|   py.typed
|   util.py
|   _version.py
|   __init__.py
|
\---__pycache__
        api.cpython-37.pyc
        arrow.cpython-37.pyc
        constants.cpython-37.pyc
        factory.cpython-37.pyc
        formatter.cpython-37.pyc
        locales.cpython-37.pyc
        parser.cpython-37.pyc
        util.cpython-37.pyc
        _version.cpython-37.pyc
        __init__.cpython-37.pyc

Package ‘arrow’ được install vào folder site-packages\arrow trên Windows. Library ‘arrow’ được install với command pip. Package ‘arrow’ gồm rất nhiều module trong đó.

Python subpackages

Chúng ta có thể tạo sub-package. Để access vào sub-package, chúng ta sử dụng toán tử .
Ví dụ 3: import từ sub-package
.
├── constants
│ ├── __init__.py
│ ├── data.py
│ └── numbers
│ ├── __init__.py
│ └── myintegers.py
└── read.py

constants/__init__.py

from .data import names

Trong file __init__.py, chúng ta import ‘names’ trong module ‘data.py’

constants/data.py

names = ('Jack', 'Jessica', 'Robert', 'Lucy', 'Tom')

Module ‘data’ trong package constants, định nghĩa tuple ‘name’

numbers/__init__.py

from .myintegers import myintegers

File __init__.py trong package ‘number’, import ‘myintegers’

numbers/myintegers.py

myintegers = (2, 3, 45, 6, 7, 8, 9)

Module ‘myintegers’ định nghĩa tuple 7 số nguyên. Tuple này sẽ được access từ script read.py

read.py

from constants import names
from constants.numbers import myintegers

print(names)
print(myintegers)

Script read.py import ‘names’ từ package ‘constant’, và import ‘myintegers’ từ sub-package ‘constants.numbers’

Kết quả:
c:\Users\Dell\python read.py
(‘Jack’, ‘Jessica’, ‘Robert’, ‘Lucy’, ‘Tom’)
(2, 3, 45, 6, 7, 8, 9)

Be the first to comment

Leave a Reply