Packages#
The main feature of Python is its extensive collection of packages that enhance its functionality. On this page, we will explore various aspects of working with some of these packages.
Note: Some packages have dedicated sections.
The table below lists the most useful python packages whose names are easy to forgot.
Package |
Purpose / Goal |
Install Command |
Docs Link |
|---|---|---|---|
|
Copy/paste clipboard cross-platform |
|
|
|
Load |
|
|
|
Pretty terminal output (text, tables, markdown) |
|
|
|
Build beautiful CLI apps with minimal code |
|
|
|
Data validation and parsing using Python types |
|
|
|
Modern async/sync HTTP client |
|
|
|
Lightweight job scheduler |
|
|
|
Watch for file system changes |
|
|
|
Create command-line interfaces |
|
|
|
Super simple logging |
|
|
|
Format tables in plain text |
|
|
|
Add progress bars to loops |
|
|
|
Cross-platform terminal colors |
|
|
|
Validate emails, URLs, IPs, etc. |
|
|
|
Guess file type by content, not extension |
|
|
|
Convert numbers/dates to human-readable formats |
|
|
|
Pretty terminal spinners |
|
|
|
Debug print with context (like |
|
|
|
Parse natural language dates |
|
|
|
Short, URL-safe UUIDs |
|
tqdm#
tqdm is a package that allows to create progress bars in the terminal using pseudographics. For more details check specific page.
The following cell demonstrates typical usage of tqdm. The tqdm.tqdm object wraps an iterable in a for loop, so each iteration of the loop increments the progress bar by 1.
import tqdm
for _ in tqdm.tqdm(range(10), ncols=100, desc="my bar"): pass
my bar: 100%|███████████████████████████████████████████████████| 10/10 [00:00<00:00, 120180.63it/s]
zipfile#
zipfile is a package that allows you to operate on ZIP archives in Python.
As an example, we’ll create a ZIP file using a Linux command line, and then unpack that archive using Python.
The following cell is creating file that we’ll use as example.
%%bash
echo "zipped message" > zip_example_file
zip -r archive.zip zip_example_file
rm zip_example_file
adding: zip_example_file (stored 0%)
Now, using zipfile.ZipFile, we’ll open the created archive and extract all its contents to the current directory.
from zipfile import ZipFile
with ZipFile("archive.zip") as f:
f.extractall(".")
Now we can check the contents of the extracted file - it the same like during creation.
!cat zip_example_file
zipped message
After everything is done, don’t forget to clear the environment.
%%bash
rm -r zip_example_file archive.zip
Psutil#
psutil is a package that allows you to get in python program information about the harware resources used by a Python program. Check details in the documentation of the tool.
The following cell shows code to get information about the RAM used by the program.
import psutil
process = psutil.Process()
(process.memory_info().rss / (1024**2))
62.97265625
To make sure that it really works, the following cell creates a large object and counts the RAM used by the process.
ans = [0 for _ in range(2**25)]
(process.memory_full_info().rss / (1024**2))
318.97265625
Now the number is much larger. Finally, delete the large object and measure the RAM again.
del ans
(process.memory_full_info().rss / (1024**2))
63.171875
APScheduler#
APScheduler is a package that allows to start and controll processes that will do some jobs according to some triggers.
For more check:
Official APScheduler documentation.
Corresponding page on this website.
The following cell shows how to run the simplest BackgroundScheduler. This code will start a process that prints the current time to the console every 3 seconds.
from datetime import datetime
from apscheduler.schedulers.background import BackgroundScheduler
def periodic_task():
print(datetime.now().time())
scheduler = BackgroundScheduler()
scheduler.add_job(periodic_task, "interval", seconds=3)
scheduler.start()
11:54:38.109044
11:54:41.108479
11:54:44.108156
11:54:47.108562
11:54:50.108621
11:54:53.108557
Stop the scheduler using the shutdown method.
scheduler.shutdown()
Drawsvg#
drawsvg is a package that allows you to describe SVG graphics with python code. Check out the Drawsvg quick reference.
The following table represents the basic features of the drawsvg package:
Category |
Function / Class |
Description |
|---|---|---|
Drawing |
|
Create a drawing container. |
|
Append elements to the drawing. |
|
|
Export as an SVG string. |
|
|
Save SVG directly to file. |
|
|
Export as PNG (requires |
|
Composition |
|
Group multiple elements ( |
|
Reuse elements by reference ( |
|
Shapes |
|
Draw rectangles. |
|
Draw circles. |
|
|
Draw ellipses. |
|
|
Draw straight lines. |
|
|
Draw polygons. |
|
|
Freeform path drawing. |
|
Text |
|
Add text elements. |
Transformations |
|
Apply translation transform. |
|
Apply scaling transform. |
|
|
Apply rotation transform. |
|
|
Set transform on an element. |
|
Accessibility |
|
Add title (tooltip). |
|
Add description (for accessibility/metadata). |
The following cell shows how to draw a cross on a red background using svg.
import drawsvg as dw
d = dw.Drawing(500, 500)
d.append(dw.Rectangle(10, 10, 490, 490, fill="red"))
d.append(dw.Line(50, 450, 450, 50, stroke='black', stroke_width=10))
d.append(dw.Line(50, 50, 450, 450, stroke='black', stroke_width=10))
d
As you can see, Jupyter knows how to represent the results of the drawsvg library.
For me, it’s typically important to be able to load the corresponding SVG code. Do that with as_svg method of the drawsvg canvas.
print(d.as_svg())
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
width="500" height="500" viewBox="0 0 500 500">
<defs>
</defs>
<rect x="10" y="10" width="490" height="490" fill="red" />
<path d="M50,450 L450,50" stroke="black" stroke-width="10" />
<path d="M50,50 L450,450" stroke="black" stroke-width="10" />
</svg>
Viewbox#
Applying a viewbox can be a bit confusing. This is because original SVG syntax allows for some flexibility. In drawsvg, you have to specify exactly viewBox name (camel naming) and enter the value as a sting with four numbers separated by the space.
The following cell illustrates the use of the viewBox. It sets the viewbox to display only a corner of the rectangle added later.
d = dw.Drawing(width=200, height=200, viewBox="-10 -10 100 100")
d.append(dw.Rectangle(
0, 0, 200, 200,
fill="none",
stroke_width=20,
stroke="black"
))
d
Gradio#
Gradio is an instrument that allows you to build simple user interfaces for taking some input and immediate output. It is ideal for prototyping the machine leaning models, but can also be used in more generally.
The following cell shows the gradio hello world and an approach to visualizing the output in a jupyter notebook.
import gradio as gr
def greet(name: str) -> str:
return f"Hello {name}!"
demo = gr.Interface(fn=greet, inputs="text", outputs="text")
demo.launch(inline=True)
* Running on local URL: http://127.0.0.1:7860
* To create a public link, set `share=True` in `launch()`.
AWS SDK#
The AWS SDK for Python is the boto3 package.
Obviously, you need a aws subscription to use the boto3. Fortunately, if you just familiarise yourself with the API you, can use the moto package, which mocks the behaviour of boto3.
The following table lists and describes the key components of the boto3 package.
Entity |
Description |
Abstraction Level |
Typical Use |
Notes |
|---|---|---|---|---|
Client |
Low-level interface that directly maps to AWS API operations. |
Low |
Perform AWS operations with full control over request parameters. |
Follows AWS API 1:1; returns plain dictionaries (no objects). |
Resource |
Higher-level, object-oriented abstraction built on top of clients. |
High |
Work with AWS resources as Python objects instead of manual API calls. |
Not all AWS services support resources; auto-manages pagination and references. |
Collection |
Iterable abstraction that groups related resources. |
Medium |
Iterate or filter groups of resources. |
Returned by resource properties (e.g. |
Resource Instance |
Represents a single AWS resource (e.g., an S3 bucket or EC2 instance). |
High |
Access attributes or perform actions on that specific resource. |
Exposes both attributes and actions of the AWS resource. |
Resource Meta |
Holds low-level metadata about a resource. |
N/A |
Access client and configuration of a resource. |
Often used to access the underlying client for unsupported operations. |
Waiter |
Utility that polls AWS APIs until a resource reaches a desired state. |
Medium |
Wait for resources to be created, updated, or deleted. |
Built into clients; waits for specific conditions. |
Paginator |
Handles paginated API responses automatically. |
Medium |
Iterate through results that span multiple pages. |
Available via clients and some resources. |
See the AWS SDK page for a more detailed description.
The following cell shows the region which is specified in my ~/.aws/config file.
import boto3
from moto import mock_aws
mock = mock_aws()
mock.start()
session = boto3.session.Session()
print(session.region_name)
mock.stop()
us-east-1