Язык 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.
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 тысяч проектов, среди которых вы можете найти подходящий пакет в любой жизненной ситуации. А если такого пакета нет, то почему бы не создать его и не поделиться им со всеми?
Облачные серверы от Маклауд прекрасно подходят для разработки на python.
Зарегистрируйтесь по ссылке выше или кликнув на баннер и получите 10% скидку на первый месяц аренды сервера любой конфигурации!
sunsexsurf
Предыдущий такой же пост:
https://m.habr.com/ru/company/geekbrains/blog/282249/
ну и как обычно, самое ценное - в комментариях.