May 27, 2021

14 Python-пакетов, про которые вы скорее всего не знали

Язык Python предоставляет всем пользователям возможность создавать свои пакеты и делиться ими со всем сообществом. Так появлялись очень популярные библиотеки для работы с данными (Pandas, Numpy, Matplotlib), для машинного обучения (TensorFlow, PyTorch), для веб разработки. Но есть много смешных, полезных или интересных пакетов, про которые вы вероятно никогда не слышали. Именно про них и пойдёт речь дальше.

Модули, которые не являются частью стандартной библиотеки Python, можно установить с помощью pip install <название пакета>.

tqdm

built-in: False

Отличный инструмент для подключения диаграммы выполнения вашей программы. Название происходит от арабского слова "taqadum", что означает "прогресс".

Для создания прогресс-бара необходим лишь один вызов функции:

from tqdm import tqdm
from tqdm.notebook import tqdm # для использования в Jupyter Notebook

for i in tqdm(range(10000)):
    ...

Пример прогресс-бара:

В реальном времени показывается процент выполнения, визуальное представление, сколько итераций завершилось, скорость выполнения и ожидаемое время окончания. Также модуль не требует никаких внешних библиотек.

prettytable

built-in: False

Пакет для красивого оформления и вывода таблиц. Есть поддержка заголовков столбцов, импорт из CSV и SQL. Синтаксис опять же очень простой:

from prettytable import PrettyTable

x = PrettyTable()
x.field_names = ["Country", "Capital", "is_russia"]
x.add_row(["Russia", "Moscow", True])
x.add_rows([["Argentina", "Buenos Aires", False], ["Jamaica", "Kingston", False]])
x.add_column("Starts with A", [False, True, False])

print(x)

Вывод:

+-----------+--------------+-----------+---------------+
|  Country  |   Capital    | is_russia | Starts with A |
+-----------+--------------+-----------+---------------+
|   Russia  |    Moscow    |    True   |     False     |
| Argentina | Buenos Aires |   False   |      True     |
|  Jamaica  |   Kingston   |   False   |     False     |
+-----------+--------------+-----------+---------------+

Подробнее можно почитать на странице проекта.

emoji

built-in: False

Модуль позволяет получить эмодзи по его текстовому названию. Может быть полезно в проектах, где используются эмодзи, но не хочется хранить их как символ, потому что IDE может плохо их отображать. При этом по названию будет понятен смысл смайлика. Также при написании приложения для обмена сообщениями это будет удобной фичей для пользователей.

Есть поддержка нескольких языков и синонимов (алиасов).

import emoji

print(emoji.emojize('Habr is :thumbsup:', use_aliases=True))  # Habr is 
print(emoji.demojize('Habr is '))  # Habr is :thumbsup:
print(emoji.demojize('Habr es ', language='es'))  # Habr es :pulgar_hacia_arriba:

Шпаргалку по названиям эмодзи можно посмотреть здесь

uuid

built-in: True

Пакет для генерации случайных id, поддерживает разные модели генерации. Например, uuid4 генерирует рандомный id, а uuid3 на основе md5 от названия объекта, для которого генерируется id. Как всегда, подробности можно найти в документации.

import uuid

print(uuid.uuid4())  # example: 2d8959d3-a5b3-42ef-8723-b4f4532f6d14
print(uuid.uuid3(uuid.NAMESPACE_URL, "https://habr.com/ru/users/otter18/"))  # e521cf18-5147-3137-9ca5-51bcbebe1b74

freegames

built-in: False

Хотите поиграть на рабочем месте, но игры слишком много весят? Или вы боитесь, что босс увидит, чем вы занимаетесь? Выход есть!

python -m pip install freegames

Теперь вы можете запустить любую игру из списка:

ant
bagels
bounce
cannon
connect
crypto
fidget
flappy
guess
life
maze
memory
minesweeper
pacman
paint
pong
simonsays
snake
tictactoe
tiles
tron

Для запуска игры snake используйте команду

python -m freegames.snake

Крестики-нолики:

Игра на запоминание чисел:

Все игры сделаны с помощью черепашки-рисовальщика.

howdoi

built-in: False

Ещё один прекрасный модуль, который улучшит вашу жизнь. Теперь вам не надо открывать несколько вопросов на StackOverflow, на которые нет понятного ответа с кодом. Вместо этого для вас решение найдёт howdoi:

$ howdoi install all python modules in project
pip install -r requirements.txt

Также есть поддержка подсветки, определённых сайтов и поисковых систем.

pyjokes

built-in: False

Если в вашей крови течёт PEP, а дома вас ждёт домашняя змея в клетке, то и шутки вам нужны соответствующие. Вы всегда можете получить их с помощью модуля pyjokes.

import pyjokes

print(pyjokes.get_joke())

Также есть отдельная категория с шутками Чака Норриса. Don't worry about tests, Chuck Norris's test cases cover your code too.

Fabulous

built-in: False

Вам не достаточно красивого вывода таблиц в консоль? А как насчёт вывода текста с тенями или даже картинок? Теперь это возможно! (Использовать только в небольших количествах во избежание перелома чувства прекрасного)

from fabulous import text, image
print(text.Text("Барсук!", color='#ff8c00', shadow=True, skew=5))
print(image.Image("барсук.png"))

art

built-in: False

Всё, что вам может понадобится для вывода красивых надписей или артов в терминал.

import art

print(art.randart())  # \m/(-_-)\m/
art.tprint("Habr", "mix")  # надпись Habr буквами из разных языков и шрифтов, которые могут не читаться вашими устройствами

Мне особенно нравится вывод больших букв:

import art

print(art.text2art("Habr", font='block'))
 .----------------.  .----------------.  .----------------.  .----------------.
| .--------------. || .--------------. || .--------------. || .--------------. |
| |  ____  ____  | || |      __      | || |   ______     | || |  _______     | |
| | |_   ||   _| | || |     /  \     | || |  |_   _ \    | || | |_   __ \    | |
| |   | |__| |   | || |    / /\ \    | || |    | |_) |   | || |   | |__) |   | |
| |   |  __  |   | || |   / ____ \   | || |    |  __'.   | || |   |  __ /    | |
| |  _| |  | |_  | || | _/ /    \ \_ | || |   _| |__) |  | || |  _| |  \ \_  | |
| | |____||____| | || ||____|  |____|| || |  |_______/   | || | |____| |___| | |
| |              | || |              | || |              | || |              | |
| '--------------' || '--------------' || '--------------' || '--------------' |
 '----------------'  '----------------'  '----------------'  '----------------'

Полный список возможностей можно увидеть в документации.

pyperclip

built-in: False

Модуль для работы с буфером обмена. Подобные возможности также есть в модуле Tkinter (и я пользовался этим способом, потому что он выдавался в Гугле первым):

from tkinter import Tk

tk = Tk()
tk.withdraw()
tk.clipboard_clear()
tk.clipboard_append('New clipboard comtent')
tk.update()
tk.destroy()

Но pyperclip делает жизнь проще:

import pyperclip
pyperclip.copy('Habr is the best!')
pyperclip.paste()

Под капотом стоит обработка версии системы и поиск соответствующего способа работы с буфером обмена. Например, с помощью командной строки.

moviepy

built-in: False

Пакет для редактирования видео. Имеет такие полезные функции как: обрезка, добавления текста поверх ихображения, поворот видео, создания GIF, коррекция цвета и много другое.

Одним словом, если вы хотите автоматизировать простую работу над видео, то это прекрасный инструмент для ваших целей.

Пример из официальной документации: наложение двух видеофайлов и движущегося текста

from moviepy.editor import *

# импорт основного видеоряда
ukulele = VideoFileClip("ukulele.MOV", audio=False).subclip(60+33, 60+50).crop(486, 180, 1196, 570)
w,h = moviesize = ukulele.size

# импорт пианино
piano = (VideoFileClip("piano.mp4",audio=False).subclip(30,50).resize((w/3,h/3)).margin( 6,color=(255,255,255).margin( bottom=20, right=20, opacity=0).set_pos(('right','bottom')) )

# создание текста
txt = TextClip("V. Zulkoninov - Ukulele Sonata", font='Amiri-regular', color='white',fontsize=24)
txt_col = txt.on_color(size=(ukulele.w + txt.w,txt.h-10), color=(0,0,0), pos=(6,'center'), col_opacity=0.6)

# создание траектории движения текста: зависимость координаты от времени
txt_mov = txt_col.set_pos(lambda t: (max(w/30,int(w-0.5*w*t)), max(5*h/6,int(100*t))))

# генерация финального результата
final = CompositeVideoClip([ukulele,txt_mov,piano])
final.subclip(0,5).write_videofile(".avi",fps=24,codec='libx264')

Результат: https://youtu.be/AqGZ4JFkQTU

Antigravity

built-in: True

При подключении модуля antigravity в браузере открывается комикс с сайта xkcd.com (xkcd.ru — версия на русском). В нём рассказывается про то, насколько язык Python простой. Перевод с английского языка:

I wrote 20 short programs in Python yesterday. It was wonderful. Perl, I'm leaving you.

Приписка автора комикса: I wrote 20 short programs in Python yesterday. It was wonderful. Perl, I'm leaving you.

hello

built-in: True

Все же помнят свой первый вывод Hello World!? Теперь это сделать ещё легче, надо просто написать в консоли import __hello__.

please-debug-my-code

built-in: False

И завершает этот список модуль, сделанный мной. В нём живёт маленький помощник, который отдебагает вам любой код.

import please_debug_my_code

print(please_debug_my_code.please_help("code", "..."))

Только он иногда не в настроении, и его надо хорошо попросить (или прочитать исходный код и понять, что он любит).

Заключение

Библиотека pypi содежит более 307 тысяч проектов, среди которых вы можете найти подходящий пакет в любой жизненной ситуации. А если такого пакета нет, то почему бы не создать его и не поделиться им со всеми?