Зарегистрируйтесь, чтобы продолжить обучение

Локальный запуск пакетов Python: Настройка окружения

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

Одной из таких программ является black. Это очень популярный инструмент, автоматически форматирующий код по общепринятым правилам. С его помощью команды придерживаются единого стиля написания без необходимости запоминать эти правила.

Пример кода до обработки:

def f ():
    return 2+3

Этот же код после автоматического форматирования:

def f():
    return 2 + 3

Так как black это инструмент для написания кода, то он должен устанавливаться как dev зависимость:

uv add --dev black

Следующим шагом его нужно запустить как обычную консольную утилиту. По документации видно, что имя утилиты (имя исполняемого файла) совпадает с именем пакета. Попробуем выполнить запуск:

black .

Запуск кода выше приведет к ошибке: command not found: black. Почему так происходит?

Локальная установка помещает содержимое пакета в директорию .venv текущего проекта. Командные оболочки, например Bash, при запуске утилит ищут их в специальных системных директориях, но они ничего не знают про утилиты, установленные в другие места системы, например, в наш проект. Чтобы решить эту проблему нужно запустить команду из окружения

uv run black .

Как вы увидите дальше, в реальных проектах на Python пакетов-программ достаточно много. И для запуска всех них из окружения нужна команда uv run.

Утилита или зависимость

Многие пакеты, используемые в разработке, поддерживают установку как в виде зависимости - uv add, так и в виде отдельной утилиты - uvx. Когда же какой способ применим? Если пакет требует для использования импортировать код приложения и другие зависимости, и в целом связан с проектом, то его нужно добавлять как зависимость. Например, pytest, библиотеке автотестирования для работы нужно импортировать и запускать тестируемый код, значит ее нужно ставить как зависимость. А, например, ruff, линтеру, для проверки кода не нужно проверяемый код запускать, и потому его можно использовать как утилиту.


Самостоятельная работа

  1. Добавьте black в проект
  2. Запустите его через uv run, посмотрите какие файлы были изменены
  3. Удалите его из зависимостей и запустите как утилиту через uvx
  4. Убедитесь, что команда сработала

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
Обучитесь разработке бэкенда сайтов и веб-приложений — серверной части, которая отвечает за логику и базы данных
10 месяцев
с нуля
Старт 19 декабря

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»