Zen of Python
20.1K subscribers
1.21K photos
161 videos
32 files
3.16K links
Полный Дзен Пайтона в одном канале

Разместить рекламу: @tproger_sales_bot

Правила общения: https://tprg.ru/rules

Другие каналы: @tproger_channels

Сайт: https://tprg.ru/site

Регистрация в перечне РКН: https://tprg.ru/xZOL
Download Telegram
Как обойтись без requirements.txt для скрипта-одиночки, или чем хорош uv

Стандарт PEP 723 и менеджер зависимостей uv упростили обращение со скриптами-одиночками. Теперь мы можем встраивать метаданные о зависимостях прямо в скрипты, что устраняет необходимость в requirements.txt или менеджерах пакетов.

Рассмотрим на простом примере скрипта wordlookup.py. Он извлекает определения слов из API словаря. Этот скрипт использует библиотеку httpx для выполнения асинхронных запросов. Вот как выглядит основной код:

import argparse
import asyncio
import json
import os
import textwrap
import httpx

async def fetch_word_data(word: str) -> list:
"""Получает данные слова из API словаря."""
url = f"https://api.dictionaryapi.dev/api/v2/entries/en/{word}"
async with httpx.AsyncClient() as client:
response = await client.get(url)
response.raise_for_status()
return response.json()

async def main(word: str):
"""Получает и выводит определения для данного слова."""
data = await fetch_word_data(word)
if data:
print(f"Определения для '{word}':")
for entry in data:
for meaning in entry.get("meanings", []):
part_of_speech = meaning.get("partOfSpeech")
definitions = meaning.get("definitions", [])
if part_of_speech and definitions:
print(f"\n{part_of_speech}:")
for definition_data in definitions:
definition = definition_data.get("definition")
if definition:
print(f"- {definition}")

if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Получить определения слова.")
parser.add_argument("word", type=str, help="Слово для поиска.")
args = parser.parse_args()
asyncio.run(main(args.word))

Чтобы добавить зависимость httpx в наш скрипт, мы можем использовать команду uv:

uv add --script wordlookup.py httpx

После выполнения этой команды в верхней части скрипта будут добавлены метаданные о зависимостях, что позволит uv автоматически управлять установкой необходимых библиотек при запуске скрипта.

Запускаем скрипт:

uv run wordlookup.py <слово>

При первом запуске uv создаст изолированную виртуальную среду и установит все необходимые зависимости. В дальнейшем uv будет использовать уже созданную среду.

#факт
@zen_of_python
👍5🔥42
airflow-ai-sdk | Оркестрация на откуп GPT

Этот репозиторий позволяет создавать DAG в Airflow и управлять таковыми с помощью ИИ-ассистентов на ваш выбор (хоть ChatGPT, хоть Groq).

Админ ликует, ведь Airflow без должной информационной поддержки легко становится той еще занозой.

Репозиторий проекта
#инструмент
@zen_of_python
👏21
Вышел Django 5.2

В этом релизе представлены следующие ключевые нововведения:​
— Автоматический импорт всех моделей в оболочке Django;
— Поддержка составных первичных ключей с использованием django.db.models.CompositePrimaryKey;
— Упрощенное переопределение BoundField на уровне формы, поля или проекта.​

Про CompositePrimaryKey

CompositePrimaryKey позволяет создавать первичные ключи, состоящие из нескольких полей, что особенно полезно при моделировании связей многие-ко-многим.​


from django.db import models

class Product(models.Model):
name = models.CharField(max_length=100)

class Order(models.Model):
reference = models.CharField(max_length=20, primary_key=True)

class OrderLineItem(models.Model):
pk = models.CompositePrimaryKey("product_id", "order_id")
product = models.ForeignKey(Product, on_delete=models.CASCADE)
order = models.ForeignKey(Order, on_delete=models.CASCADE)
quantity = models.IntegerField()


В этом примере модель OrderLineItem использует составной первичный ключ, состоящий из полей product_id и order_id. Это гарантирует уникальность каждой комбинации продукта и заказа. Ранее для достижения подобного поведения приходилось использовать дополнительные настройки или сторонние библиотеки. ​

#django #факт
@zen_of_python
👍43🎃1
Сравниваем Pandas, Polars и PySpark: что выбрать аналитику?

В Tproger сравнили три популярных библиотеки: Pandas, Polars и PySpark. В статье вы узнаете про производительность, удобство использования и возможности работы с большими наборами каждой из них.

#факт

@zen_of_python
👍21🤷1
Forwarded from Нейроканал
This media is not supported in your browser
VIEW IN TELEGRAM
Когда навайбкодил приложение в СhatGPT и уже подсчитываешь миллионы своего стартапа.

То самое приложение:
🔥7😁52
dayplot | Симпатичные хитмэпы

Библиотека позволяет строить тепловые карты а-ля GitHub Contributions. В одной статье забавно визуализировали с dayplot, как у Илона Маска е̶д̶е̶т̶ ̶к̶у̶к̶у̶х̶а̶, как растет число постов в X (ex-Twitter).

Проект на PyPi
#инструмент
@zen_of_python
👍3😁3
Подкаст про Python на YouTube | новости языка за март

Еще один выпуск MoscowPython, на сей раз про:
— PEP 751 и его новый формат лог-файлов;
— улучшения в синхронных функциях;
— подтверждение навыков Python на платформе Минцифры;
— GPT для питонической разработки и многое другое.

Самое оно, чтобы с пользой провести время у экрана, когда обедаешь. Разжевано и будет понятно даже новичкам.

#факт
@zen_of_python
1👍1🆒1
Ошибки и исключения в Python: в чём разница?

- Ошибки (errors) — это критические проблемы, такие как синтаксические ошибки, которые обнаруживаются до выполнения программы и не позволяют ей запуститься.

- Исключения (exceptions) — возникают во время выполнения программы при неожиданных ситуациях, например, при делении на ноль. Исключения можно перехватывать и обрабатывать в коде.

Распространённые ошибки

- SyntaxError — возникает при нарушении синтаксиса, например, при отсутствии закрывающей скобки:


print("Hello World" # Отсутствует закрывающая скобка



- IndentationError — возникает при неправильном отступе:


def greet():
print("Hello") # Отсутствует отступ



Распространённые исключения

- TypeError — операция между несовместимыми типами:


print("10" + 5) # Возникает TypeError



- ValueError — неподходящее значение аргумента:


num = int("abc") # Возникает ValueError



- KeyError — обращение к несуществующему ключу в словаре:


data = {"name": "Alice"}
print(data["age"]) # Возникает KeyError



- IndexError — обращение к несуществующему индексу в списке:


numbers = [1, 2, 3]
print(numbers[5]) # Возникает IndexError



- ZeroDivisionError — деление на ноль:


result = 10 / 0 # Возникает ZeroDivisionError



- FileNotFoundError — файл не найден:


with open("missing_file.txt", "r") as file:
content = file.read() # Возникает FileNotFoundError



Вы можете определить собственные классы исключений, наследуя от класса Exception:



class CustomError(Exception):
pass

raise CustomError("Это пользовательское исключение!")


#основы
🔥3👍21🌚1
Курс по основам API

Интерфейсы, протоколы, какие-то странные URL — всё это звучит сложно, пока не разложить по полочкам. А ведь API — штука, с которой сейчас сталкиваются почти все, кто так или иначе работает с IT.

Быстро понять, что такое API, как он устроен и где пригодится — можно даже без программирования. В этом базовом курсе собраны простые объяснения, реальные примеры и даже чуть-чуть практики в Insomnia. Разобраться в теме проще, чем кажется — особенно после такого разбора.

Ссылка на курс

#курс #api #general #начинающим #ru
1🌚1
Тест: Какой язык программирования тебе подходит

Небольшой опросник с целью определить «ваш» язык на основании айтишных интересов. Если вы новичок и без подсказок выйдете на Python — что ж, это судьба. Вопросики-то с подковыркой!

@zen_of_python
🌭2💅1
Настраиваем паука для сбора данных: как работает фреймворк Scrapy

В Tproger разобрали основные компоненты этого популярного скрейпера — пауки, пайплайны и middleware на примерах. Если продукт действительно хорош, то для него не жалко и на разных ЯП клиенты писать.

#инструмент

@zen_of_python
👍21🌭1
Forwarded from Типичный программист
Внимание: представлен Python-пакет, который делает импорт либ great again

Гений с ником Huan Xu выкатил TARIFF: open-source проект, который вводит «импортные пошлины» на Python-библиотеки. При импорте библиотека задерживается на заданный процент времени, а в консоли появляется гордое сообщение о тарифе.

Спасибо за внимание 🙏

#кек #оффтоп
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣24👍4👏2😭1
Positron | IDE для «поклонников данных»

Это перспективная среда разработки, которая предлагает:
— удобную среду для обращения с ноутбуками локально;
— поддержку тысяч плагинов, включая ИИ-копайлоты;
— темную тему;
— фокус на Python и R и многое другое.

Несмотря на некоторые ограничения, она активно развивается и может стать отличной альтернативой существующим решениям.​

Самое оно побаловаться, когда PyCharm выбесил, в очередной раз «заморозился».

#инструмент
@zen_of_python
1🗿1
py.checkio.org | Игра для освоения языка

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

На сайт игры
#обучение
@zen_of_python
👍8🆒2
В PyPI нашли библиотеку для MEXC, которая помогала… красть крипту у установивших

Вредоносный пакет ccxt-mexc-futures маскировался под легитимное расширение для автоматизации торговли криптовалютами. Пакет крал API-ключи пользователей и управлял их ордерами, перенаправляя запросы на поддельный сервер. 

Воистину, в эпоху «Девятого вала контента» пропустить такой зловред при установке инструментария легче легкого.

#безопасность

@zen_of_python
👀21
Вопросы подписчиков

Zen of Python поддерживает новоприбывших (и не только) в особой рубрике. Как это работает:

— Спрашивайте что угодно (в комментариях под этим постом), связанное с Python. Здесь нет плохих вопросов!
— Сообщество вас поддержит. Самые интересные вопросы мы разберём в отдельном посте;

#вопросы_новичков

@zen_of_python
👍3
Сегодня можно и spam, и eggs — и не только в коде!

С Пасхой, питонист!

@zen_of_python
🔥9