TGINSIGHT CHAT
Python Заметки
@pythonotes
EducationИнтересные заметки и обучающие материалы по Python Контакт: @paulwinex ⚠️ Рекламу на канале не делаю!⚠️ Хештеги для поиска: #tricks #libs #pep #basic #regex #qt #django #2to3 #source #offtop
Неодамнешни објави
Страница 8 од 32 · 384 објави
Објавено 25 сеп.
Прошлый пост про печать появился неспроста! Недавно мне потребовалось напечатать большую версию чертежа. Нужен был инстурмент, аналогичный многостраничной печати в CorelDraw но под Linux. Поэтому я решил ... чтобывыдумали???... да, сделать свой велосипед 😂 И вот что у меня вышло. ➡️ Tile Printer ▫️Интерактивное позиционирование картинки ▫️Отправка на печать или сохранение в файлы ▫️Настройка отступов ▫️Можно указать DPI ЗЫ. Не судите строго, сделано всё за 1 день. ЗЗЫ. Да, я гуглил аналоги. Самый советуемый инструмент posterazor не подошел по функционалу. Остальные не стоят внимания. #source
Hashtags
Објавено 20 сеп.
Как в Linux отправить картинку на печать из Python? Это можно сделать с помощью CUPS - Common Unix Printing System ▫️ Ставим зависимости sudo apt install -y libcups2-dev python3-dev gcc ▫️ Устанавливаекм библиотеку-обертку pip install pycups ▫️ Печатаем import cups # устанавливаем коннект conn = cups.Connection() # получаем список принтеров printers = conn.getPrinters() print(printers) printer_name = list(printers.keys())[0] # отправляем на печать conn.printFile(printer_name, image_path, "Image Print", {}) #libs
Hashtags
Објавено 20 јул.
SQLAlchemy - это один из самых популярных ORM для работы с базами данных из Python. - поддерживат все популярные базы данных - не привязана к какому-либо фреймворку (как, например, Django ORM) - поддерживает асинхрон - позволяет удобно (питонично) делать довольно сложные SQL запросы 15 июля вышла первая версия из ветки 2.0 и это хорошйи повод изучить эту библиотеку если еще не начали. Подобрал вам ресурсы для изучения: - Вебинар и урок про новую SQLAlchemy2.0 от Mike Bayer (автор sqlalchemy и alembic ) с онлайн конференции pythonwebconf: https://www.youtube.com/watch?v=Uym2DHnUEno - Для тех кто на английском не очень, есть онлайн книга на руссом от https://t.me/massonnn_yt. А так же видео версия: https://www.youtube.com/watch?v=leeC0fpAY-E&list=PLN0sMOjX-lm5Pz5EeX1rb3yilzMNT6qLM Лично я использую алхимию в связке с FastAPI и пока всё устраивает #tricks#libs
Објавено 30 јун.
Debian 12 не позволяет глобально устанавливать Python пакеты через pip. Не поможет даже sudo. Такое поведение описано в PEP 668. Это сделано для минимизации конфликтов версий системных пакетов. Если вам действительно нужно поставить что-то глобально, используйте apt install python-packagename В остальных случаях всегда используйте виртуальное окружение. #pep
Hashtags
Објавено 26 мај
У тех, кто часто работает в терминале, есть привычка вызова особо часто используемых команд. например cd, ls, mc... Вместо команды exit можно использовать Ctrl+D, и это удобно. И так уж вышло, что эта привычка невольно у меня включается и при работе в REPL. Для быстрого выхода я жму Ctrl+D, и это работает, но только в Linux. В Windows это совсем не работает, так как там надо нажимать Ctrl+Z. И был бы Windows не такой mustdie если бы этого хватило, но требуется еще нажать Enter (если знаете быстрый выход из REPL на винде, то подсказывайте, я не WinUser). Иногда мне быстрей и привычней вбить exit и нажать Enter, как в bash, но и тут подстава - еще нужны скобки вызова🤬. В общем, настолько высосанную из пальца проблему надо еще поискать 😆, но я нашел для неё решение! q = type('q', (object,), {'__repr__': lambda *args: exit()})() Этот код вставляется в стартап скрипт REPL и создаёт новый объект q. Теперь для выхода из REPL достаточно написать символ q и нажать Enter. Работает одинаково на Linux и Windows. Как это работает? ▫️ динамически создаётся новый тип объекта с помощью конструкции type(NAME, (BASETYPES,), {ATTRS,}) ▫️ в атрибутах создаётся оверрайд метода __repr__, который отвечает за распечатку объекта в REPL ▫️ в этом методе вызывается команда exit() То есть команда выхода срабатывает как только вы пытаетесь распечатать этот объект в консоли. Именно отображение его репрезентации как объекта а не через не print(), который использует метод __str__. Аналогично работающий код выглядит так: class Q: def __repr__(self): exit() q = Q() Из минусов можно выделить следующее: ▫️ имя q занято, но никто не мешает сделать что-то более уникальное ▫️ Нужно как-то добавлять это в стартап. Тут нам поможет startup script Аналогичным способом можно сделать и другие действия, но стоит помнить что это нестандартное поведение в Python, в прод не оставляйте! Пару раз я вставлял аналогичные объекты в интерактивную консоль для дебага, они там выполняли роль шорткатов для каких-то наборов действий PS. Не очень-то это похоже на трик или лайфхак. Это скорей демонстрация гибкости языка в решении надуманных нестандартных проблем. #tricks
Hashtags
Објавено 22 мај
Популярность имеет свои минусы. Чем популярней язык программирования, тем выше его распространённость, а значит найдутся те кто поспешит воспользоваться этим. С ростом популярности Python всё больше на PyPi появляется вредоносных пакетов. Трояны, стиллеры и доставщики более опасных вредоносов. Команда PyPi постоянно мониторит подобные случаи но и их возможности достигли предела. В результате сервис временно закрывает возможность заливки новых пакетов и регистрации юзеров. PyPI new user and new project registrations temporarily suspended Возможно одной из причин большого наплыва вредоносов является резко возросшая доступность их создания. Сегодня любой, даже не программист, может попросить у ChatGPT написать необходимый код и все инструкции для атаки. Основной тип атаки - рассчёт на опечатку в названии пакета. Если невнимательный программист случайно установит pilow или djangoo, считай что вредонос уже в системе. Чтобы избежать подобных факапов я рекомендую: ▫️ Всегда работайте в виртуальном окружении, неизвестные проекты устанавливайте внутри контейнеров. ▫️ Используйте файл requirements.txt вместо ручной установки пакетов ▫️ Очень внимательно пишите названия пакетов, а после написания проверьте еще раз. Сверьте с названием из документации. ▫️ После успешных тестов всегда фиксируйте версию пакета. Бывали случаи когда опасный код добавляли в новые версии. К тому же и без этой опасности не рекомендуется ставить по умолчанию последнюю версию. ▫️ Используйте вспомогательные инструменты для проверки безопасности, например https://pyup.io/safety или https://github.com/PyCQA/bandit. Они помогут не только найти опасный код в чужих пакетах, но и ваш код проверит на уязвимости. Будем надеяться что PyPi переосмыслит методы борьбы с вредоносами, например внедрит ИИ для проверки как симметричный шаг. #offtop
Hashtags
Објавено 29 мар.
В Linux стандартными средствами можно использовать часть оперативной памяти как диск. Для этого требуется указать тип монтирования tmpfs в команде mount mount -t tmpfs -o size=5G tmpfs /mnt/ram Теперь путь /mnt/ram можно использовать как обычный каталог. Для чего это может быть нужно? ▫️ Скорость работы с таким каталогом выше чем многие SSD и тем более HDD. ▫️ Если у вас очень быстрый SSD на NVMe M.2 то такой способ особо не прибавит вам скорости, но поможет сохранить ресурс SSD когда требуется обрабатывать очень много мелких файлов и оперативка позволяет выделить нужный объем. ▫️ Оперативка это энергозависимая память, поэтому выключении питания все файлы безвозвратно теряются. Такой "non persistent" каталог гарантирует удаление временных файлов. Я написал небольшой скрипт для условного теста и сравнения скорости копирования файлов между SSD и RAM. Вот мои результаты: Single File Size: 30.0Gb ssd > ssd: 0:00:12.850 / 2.3Gb/s sdd > ram: 0:00:06.453 / 4.6Gb/s ram > ram: 0:00:06.995 / 4.3Gb/s ram > sdd: 0:00:06.217 / 4.8Gb/s Dir size: 32.7Gb, File count: 11127 ssd > ssd: 0:00:15.063 / 2.2Gb/s sdd > ram: 0:00:08.486 / 3.9Gb/s ram > ram: 0:00:08.032 / 4.1Gb/s ram > sdd: 0:00:07.026 / 4.7Gb/s Скрипт для теста ↗️ На моём железе прирост скорости ~2x. Плюс экономия ресурса SSD. В Windows такой фишки по умолчанию нет, но обязательно найдутся аналогичные решения #linux#triks
Објавено 8 мар.
Поздравляю всех подписчиц с праздником❗️🌹👠
Објавено 3 мар.
Как получить путь к файлу текущего класса если метод получения пути находится в родительском классе в другом файле? Например, представим такую ситуацию: # module1.py ### class BaseCls: @classmethod def get_path(cls): print(__file__) # module2.py ### from module1 import BaseCls class MainCls(BaseCls): pass Что покажет код: import module2 module2.MainCls.get_path() Мы ожидаем что путь будет к файлу module2.py, но переменная __file__ объявлена внутри файла module1.py и поэтому будет указывать именно на него. Чтобы получить правильный путь нам следует: ▫️ получить имя модуля текущего класса module_name = module2.MainCls.__module__ ▫️ найти этот модуль в списке импортированных модулей mod = sys.modules[module_name] ▫️ получить значение переменной __file__ filepath = mod. __file__ Вся эта процедура, причём для любого типа объекта, есть в функции inspect.getfile(). Так что наш метод должен выглядеть так: # module1.py import inspect class BaseCls: @classmethod def get_path(cls): print(inspect.getfile(cls)) Теперь из вызов этого метода из класса MainCls найдёт путь к файлу module2.py #tricks
Hashtags
Објавено 22 фев.
Вышла альфа версия Python 3.12. Можно оценить что нам готовят. Полезно глянуть что будет удалено в 3.13. distutils уже удалили. Еще можно посмотреть стрим на час про новинки. #release
Hashtags
Објавено 19 јан.
Помните трик с заменой строки в консоли с помощью символа "\r"? Рассказывал в этом посте. Что будет если сделать несоклько таких символов? Мы вернёмся на несколько строк выше? Нет, так не сработает. Как же сделать замену нескольких строк? Для этого нужна хитрая комбинация символов: \x1b[1A\x1b[2K Что это вообще за магия? Это специальный код для управления курсором консоли. \x1b : экранирующий символ означающий что дальше следует специальный символ. Он же символ ESC [1A : команда "поднять курсор вверх". Есть и другие команды для перемещения курсора в разные стороны. [2K : удалить текущую строку. "2" означает всю строку. Еще есть опции: "0" - от курсора до конца, "1" - от курсора к началу. Итого, наша абракадабра значит - подняться на строку вверх и удалть всю строку. Полный список специальных символов можно найти на этой странице. Эти функции консоли широко используются. Например модуль colorama использует модификации для изменения цвета текста в консоли. В демке на видео показана манипуляция тремя строками в консоли. Пишем три строки, удаляем три строки, и тд. ➡️ Код с демонстрацией #triks
Hashtags
Објавено 19 јан.