1 added
1 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Существует отдельный класс пакетов-программ, которые связаны с конкретными проектами. То есть они устанавливаются в проект, но запускаются как программы, а не импортируются в код как библиотека. В основном эти программы выполняют различные манипуляции с кодом, начиная от исправления ошибок, до различных преобразований исходного кода например с целью работы на более старых версиях интерпретатора или подготовки кода для работы в браузере.</p>
1
<p>Существует отдельный класс пакетов-программ, которые связаны с конкретными проектами. То есть они устанавливаются в проект, но запускаются как программы, а не импортируются в код как библиотека. В основном эти программы выполняют различные манипуляции с кодом, начиная от исправления ошибок, до различных преобразований исходного кода например с целью работы на более старых версиях интерпретатора или подготовки кода для работы в браузере.</p>
2
<p>Одной из таких программ является black. Это очень популярный инструмент, автоматически форматирующий код по общепринятым правилам. С его помощью команды придерживаются единого стиля написания без необходимости запоминать эти правила.</p>
2
<p>Одной из таких программ является black. Это очень популярный инструмент, автоматически форматирующий код по общепринятым правилам. С его помощью команды придерживаются единого стиля написания без необходимости запоминать эти правила.</p>
3
<p>Пример кода до обработки:</p>
3
<p>Пример кода до обработки:</p>
4
<p>Этот же код после автоматического форматирования:</p>
4
<p>Этот же код после автоматического форматирования:</p>
5
<p>Так как black это инструмент для написания кода, то он должен устанавливаться как dev зависимость:</p>
5
<p>Так как black это инструмент для написания кода, то он должен устанавливаться как dev зависимость:</p>
6
<p>Следующим шагом его нужно запустить как обычную консольную утилиту. По документации видно, что имя утилиты (имя исполняемого файла) совпадает с именем пакета. Попробуем выполнить запуск:</p>
6
<p>Следующим шагом его нужно запустить как обычную консольную утилиту. По документации видно, что имя утилиты (имя исполняемого файла) совпадает с именем пакета. Попробуем выполнить запуск:</p>
7
<p>Запуск кода выше приведет к ошибке: command not found: black. Почему так происходит?</p>
7
<p>Запуск кода выше приведет к ошибке: command not found: black. Почему так происходит?</p>
8
<p>Локальная установка помещает содержимое пакета в директорию<em>.venv</em>текущего проекта. Командные оболочки, например Bash, при запуске утилит ищут их в специальных системных директориях, но они ничего не знают про утилиты, установленные в другие места системы, например, в наш проект. Чтобы решить эту проблему нужно запустить команду из окружения</p>
8
<p>Локальная установка помещает содержимое пакета в директорию<em>.venv</em>текущего проекта. Командные оболочки, например Bash, при запуске утилит ищут их в специальных системных директориях, но они ничего не знают про утилиты, установленные в другие места системы, например, в наш проект. Чтобы решить эту проблему нужно запустить команду из окружения</p>
9
<p>Как вы увидите дальше, в реальных проектах на Python пакетов-программ достаточно много. И для запуска всех них из окружения нужна команда uv run.</p>
9
<p>Как вы увидите дальше, в реальных проектах на Python пакетов-программ достаточно много. И для запуска всех них из окружения нужна команда uv run.</p>
10
<h3>Утилита или зависимость</h3>
10
<h3>Утилита или зависимость</h3>
11
-
<p>Многие пакеты, используемые в разработке, поддерживают установку как в виде зависимости - uv add, так и в виде отдельной утилиты - uvx. Когда же какой способ применим? Если пакет требует для использования импортировать код приложения и другие зависимости, и в целом связан с проектом, то его нужно добавлять как зависимость. Например, pytest, библиотеке автотестирования для работы нужно импортировать и запускать тестируемый код, значит ее ��ужно ставить как зависимость. А, например, ruff, линтеру, для проверки кода не нужно проверяемый код запускать, и потому его можно использовать как утилиту.</p>
11
+
<p>Многие пакеты, используемые в разработке, поддерживают установку как в виде зависимости - uv add, так и в виде отдельной утилиты - uvx. Когда же какой способ применим? Если пакет требует для использования импортировать код приложения и другие зависимости, и в целом связан с проектом, то его нужно добавлять как зависимость. Например, pytest, библиотеке автотестирования для работы нужно импортировать и запускать тестируемый код, значит ее нужно ставить как зависимость. А, например, ruff, линтеру, для проверки кода не нужно проверяемый код запускать, и потому его можно использовать как утилиту.</p>