Python
Почему нейросети любят "Python" и что это значит
Знакомство с UV. Если вы хоть краем уха слышали про нейросети, искусственный интеллект и всякие умные программы, то почти наверняка рядом с этими словами мелькал "Python". Кажется, будто все нейросети и правда крутятся вокруг этого языка, и даже те, кто никогда раньше не писал ни одной строчки кода, уже запомнили его название.
Но почему именно он?
- Почему не какой-нибудь «супербыстрый» язык или не тот же самый модный JavaScript, на котором половина интернета работает?
Чтобы ответить на эти вопросы, давайте разберём всё с самого начала, как будто мы разговариваем не с программистами, а с обычными людьми, которые компьютером пользуются в основном для фильмов, музыки и переписки.
Что вообще такое Python
Python — это язык программирования. На нём пишут программы, так же как на человеческом языке пишут книги. Только вместо «жили-были» там слова вроде:
print("Hello, world!")
Самое главное — Python очень простой. Он похож на английский в своей упрощённой форме. Многие программисты именно с него и начинают, потому что с первых минут всё выглядит ясно и не пугающе. Попробуйте написать то же самое на семействе "C", и запутаетесь с непривычки.
Пример: вы хотите, чтобы компьютер посчитал, сколько будет два плюс два. На Python это пишется так:
print(2 + 2)
И всё. Компьютер выведет «4».
На других языках часто приходится писать больше служебных слов, которые новичку кажутся тарабарщиной. В этом и есть главная прелесть Python:
- Он дружелюбный и понятный.
Почему нейросети выбрали именно Python
Теперь представьте, что вы — учёный или инженер, который пытается заставить компьютер распознавать лица, переводить тексты или сочинять музыку. Вам важнее, чтобы код был быстрым в написании и легко читаемым. Вам не хочется тратить месяцы на то, чтобы объяснять компьютеру базовые шаги.
И вот тут Python оказывается идеальным. Он сам по себе не самый быстрый язык (даже довольно медленный по сравнению с «железными монстрами» вроде C++), но у него есть огромный арсенал библиотек — готовых коробок с инструментами.
- Хотите математику? Есть NumPy.
- Хотите машинное обучение? Есть TensorFlow и PyTorch.
- Хотите картинки крутить и вертеть? Есть OpenCV.
Все эти штуки написаны так, чтобы вы могли пользоваться ими через Python, даже если внутри они работают на супербыстром коде. Получается, что учёные пишут короткие и понятные программы, а «под капотом» всё крутится на скорости реактивного самолёта.
Ещё одна причина — сообщество.
Python популярен во всём мире, и когда тысячи умных людей годами развивают один инструмент, он становится удобнее и сильнее. Любая ошибка или непонятная задача решается поиском в интернете, потому что почти наверняка кто-то уже сталкивался с тем же самым.
Именно поэтому любой человек, который занимается нейросетями в любом их виде, дожен знать хотя бы элементарные вещи про этого самого "питона", о чем мы и поговорим дальше.
Утверждение "Со времен создания сказки лес сильно изменился" относится и к нейросетям, и к питону. Проходит 2-3 месяца, появляется новое и сегодняшнее уже теряет актуальность. Поэтому я расскажу дальше о новой идеологии работы с питоном, которая появилась в прошлом году. В дальнейшем, на следующие годы, эта технология станет основной для Python.
Как установить "ComfyUI" с помощью UV
Видеоролик к статье с процессом установки можно помостреть на РуТубе по адресу: https://rutube.ru/video/216de1c6e5e1fb214fe09728acb1f83b или на Ютубе по адресу: https://youtu.be/oNcRjyQyxsY
Я сначала покажу последовательность команд, которые подготавливают систему и устанавливают "ComfyUI", а потом расскажу и опишу команды более подробно (... чтобы сразу не нагружать мозг читателю. Будет создана папка "c:\Test_ComfyUI" и в нее установлено все, что требуется)
- powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
- md c:\Test_ComfyUI && cd /d c:\Test_ComfyUI
- git clone https://github.com/comfyanonymous/ComfyUI.git
- git clone https://github.com/ltdrdata/ComfyUI-Manager.git "%CD%\ComfyUI\custom_nodes\ComfyUI-Manager"
- uv venv --python 3.12 --seed
- uv pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu129
- uv pip install -r "%CD%\ComfyUI\requirements.txt"
- uv run "%CD%\ComfyUI\main.py" --windows-standalone-build --front-end-version Comfy-Org/ComfyUI_frontend@latest
Восьмая строка этих команд уже запускает "ComfyUI". Причем первые две строки команд скачивают и устанавливают сам UV (если он уже установлен их можно пропустить), создают новую папку и переходят в нее (тоже можно опустить если устанавливать "в текущей папке"). А третья и четвертая строки скачивают сам ComfyUI и его менеджер.
В "более читабельном" варианте можно посмотреть тут:
Примечание: в России на строке #6 ( и на #7 по ссылке) может зависнуть! Если процесс не пойдет, то включите VPN, адрес может быть рандомно заблокирован РКН!
Фактически вся работа по установке питона и всех нужных компонентов занимает всего... три строки, остальное - "кружева" вокруг установки и настройки питона. Причем, заметьте, нигде нет команд установки самого питона, т.к. UV просто прячет от нас процесс его скачивания и установки.
Примечание: данные команды рассчитаны на то, что в системе не установлен в путях какой-то другой питон версии 3.12!!! Иначе произойдет коллизия версий!!!
Примечание: вы можете вообще использовать BAT-файл со всеми этими командами для установки всего, что нужно. Его можно скачать по ссылке:
https://github.com/Nestorchik/OneBatFileForAll/blob/main/install_ComfyUI_with_UV_V2.bat
Дальше подробный разбор этих, и других команд UV для лучшего понимания системы.
Менеджер пакетов "UV"
Кратко — что важно знать в начале
UV — это менеджер для Python, который умеет сам скачивать и управлять версиями питона, создавать venv (виртуальные окружения) и запускать команды внутри этих окружений. Главная идея:
- Не нужно вручную ставить Python и ковыряться с venv — uv делает это за вас по требованию.
Простое объяснение
- "Python" (основной его пакет) можно сравнить с магнитофоном или проигрывателем, которые сами по себе ни спеть ни сплясать не могут. Они предназначены для "проигрывания" того, что в них поставят: кассету с записью, пластинку и т.п.
- "UV" - менеджер, с которым вы непосредственно работаете, а он уже сам управляет питоном
- "ComfyUI" - программа на языке Python, которая как раз и является этой самой "кассетой" или "пластинкой", которую основной пакет питона прочитает и "споет" все, что там написано.
Программы могут быть совершенно разные, их миллионы. Но нас интересует именно "ComfyUI", поскольку он "де-факто" является лучшей их оболочек, предназначенных для работы с нейросетями, поэтому мы и будем разбирать именно ее.
Чем хорош UV
Работая с UV мы вступаем сразу на следующую ступеньку работы с нейросетями, поскольку он прячет от нас самое трудное - заботу и самом Python и его версиях. Мы просто забываем об основном "питоне" и концентрируемся только на работе с программой.
Установка UV
Для того, чтобы работать с UV, его надо сначала установить. Устанавливается он так (я привожу рекомендуемые мною установки):
Windows:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
Linux & macOS
curl -LsSf https://astral.sh/uv/install.sh | sh
В дальнейшем я работу под линукс не рассматриваю, она мало чем отличается от работы под Windows
После установки указанным способом UV помещается в текущую папку пользователя в папку "\.local\bin":
Диск:\\Users\Имя Пользователя\.local\.bin
... и содержит три файла:
- uv.exe
- uvx.exe
- uvw.exe
Он должен так же, как и GIT, быть доступен в PATH, и вызываться из любого места независимо от текущего каталога! Как правило PowerShell его ставит в PATH сам. После его установки о нем можно забыть так же, как и о GIT, но помнить, что надо периодически обновлять его версию командой:
uv --version # проверка версии
uv self update # обновить
Все! Можете о нем теперь забыть так же, как и о git. Важно помнить, что его всегда можно вызвать командой из двух букв - "uv".
Идеология работы с UV
Главная идеологическая особенность — UV сам скачивает Python, когда он нужен! Я у себя после знакомства с UV удалил из Windows все остальные дистрибутивы Python (если они не пришиты как портабельные к чему-то), и перешел полностью на работу только через UV, настолько это оказалось удобно.
Мало того, он сам написан на языке "Rust" и скорость его работы просто поражает. Многие операции он выполняет до 100 раз быстрее, чем обычная утилита "pip" встроенная в Python и полностью совместим с Python.
Примечание: при установке UV он сканирует системные переменные и, если обнаруживает в системе зарегистрированные экземпляры питона, но подхватывает их и может работать еще и с ними.
Вот именно это я и НЕ советую!
Я категорически советую удалить (или спрятать) все остальные экземпляры питона, если они вписаны в системное окружение Windows в переменных, в путях (path), в лаунчерах, в ассоциациях PY-файлов и т.п. Это позволит избежать многих стандартных ошибок старой идеологии, когда возникали путаницы в путях к разным версия Python, а пользователь был "не в курсе" где именно у него стоит (стоЯт) питоны, каких версий и сколько их вообще!
С UV вы избавитель от всех этих проблем в принципе!
Идеология работы с VENV
При работе с UV мы вообще забываем что такое питон и даже где он лежит т.к. UV сам об этом заботится. Но знать где у него все "это" лежит надо. Для чего? Для того, чтобы понимать структуру UV.
Всего таких места три:
- Сами EXE-шники лежат на
Диск:\\Users\Имя Пользователя\.local\.bin
(Вообще-то они могут лежать где угодно, это не принципиально, просто папка в которую их положил установочный скрипт, является стандартной для UV, и в линуксе он лежит в точно таких же папках в каталоге пользователя. Так что откуда UV запускать - абсолютно все равно). - Папка для основных дистрибутивов питона:
Диск:\Users\ИмяПользователя\AppData\Roaming\uv\python\ - Папка кеша: сюда помещаются все пакеты, которые скачиваются UV для установки. Если UV установил какой-то пакет, то он, если потребуется в следующий раз, будет браться из локального кэша, если он там есть, а не скачиваться каждый раз из интернет. Папка находится по адресу:
Диск:\Users\ИмяПользователя\AppData\Local\uv\cache
Кеш чистится командой: uv cache clean
Информационные команды UV
- uv python list
- выводит список всех доступных для установки версий питона и список установленных версий.
- uv python list --only-installed
- выводит список только установленных версий.
- uv python dir
- показать каталог, куда UV устанавливает свои Python-дистрибутивы.
- uv cache dir
- показать каталог кэша UV.
Установка "Python" с помощью "UV"
Это самые простые команды:
- uv python install
- скачивает и устанавливает самую последнюю версию питона - uv python install 3.12
- скачивает и устанавливает конкретную версию питона - uv python install 3.10 3.12 3.13
- скачивает и устанавливает перечисленные версии питона - uv python uninstall 3.10 3.12 3.13
- деинсталлирует перечисленные версии питона
Деинсталляция происходит с теми же ключами что и инсталляция.
Это то, что касается "базового" питона. Вам никогда не придется в него лезть и что-то с ним делать, главное чтобы он БЫЛ, и нужной версии.
Теперь следующая часть повествования.
Установка библиотек "Python"
Будем считать, что самого "питона" мы установили. Теперь мы о нем больше не заботимся и даже не вспоминаем. Перейдем к библиотекам.
Каждая программа на языке питон читается из *.PY-файла и исполняется. Программы могут быть совершенно на разную тематику, с разным назначением и т.п. Язык питон устроен так, что в "основном питоне" находится только ядро, исполняющее код, а все, что нужно конкретно каждой отдельной программе, располагается в ее "библиотеках". В простом понимании, если (к примеру только!) программа - это "оркестр", который играет музыку, то для того, чтобы он что-то смог сыграть, ему требуются ноты. Соответственно к каждой программе (оркестру) приложена своя библиотека (ноты), и что именно сыграет программа (оркестр), зависит от нее, но для этого ей нужны определенные ноты.
Эти библиотеки (ноты) в питоне называются "виртуальное окружение", которое расположено (обычно) где-то рядом с программой, как хорошее правило - это папка и именем "venv" (от "Virtual Environment").
Вообще-то эта папка может иметь любое имя, но стандартное "соглашение" в питоне давать этой папке имя "venv" или ".venv" (точка перед именем папки означает "скрытая папка").
Менеджер UV прекрасно знает это имя, и хотя он может работать с любыми названиями это папки, он, по умолчанию, ориентируется на название папки с именем ".venv".
Для того, чтобы начать работать с любой программой на питоне, ей надо создать свое venv, если ей для работы нужны какие-то "библиотеки".
Создание VENV
Хорошим стилем в питоне считается создание venv рядом с папкой основной программы. Для этого надо сделать текущим каталог, в котором мы будем устанавливать программу и выполнить команду:
- uv venv
UV создаст в текущем каталоге папку с именем ".venv", скопирует в нее все нужные для его работы файлы и настроит эту папку для работы. По умолчанию UV установит самую высшую версию из имеющихся, а, если ни одной установленой версии нет вообще, то сам сначала скачает последнию из имеющихся. На фото он сначала скачал версию 3.13.7 и потом только на ее основе создал ".venv".
Примечание: если мы работаем с UV то "активировать VENV" как это обычно делается в питоне, не надо (хотя строка активации и показывается). UV будет и так выполнять все действия по установке в папку VENV если найдет ее, а ищет он ее "в текущем каталоге" и ищет он имя ".venv". Так что, если вы эту папку как-то обзовете по-другому, он может ее и не найти! Учтите это правило!!!!!
Но нам (в основном) всегда требуется какая-то определенная версия питона, поэтому команду можно выполнить так:
- uv venv --python 3.12
- uv venv --python 3.12.4
- uv venv --python 3.13
Так будет создано venv именно указанной версии.
После того, как venv создано, в него можно начать установку т.н. "пакетов" (сборников нот).
Пакет - библиотека программного кода написанная кем-то ранее, которой пользуется устанавливаемая вами программа.
Каждый пакет имеет какое-то назначение, как то:
- математические функции
- работу с принтером
- работа с экраном
- работа с графикой
- работа с видео
... и т.п. Поэтому любой программист на питоне может использовать те библиотеки, которые считает нужным. Вместе с распространяемой им программой он прикладывает список библиотек, которые требуются для работы его программы. Этот список, как правило, находится в корне его программы и имеет имя:
- requirements.txt
Возможны варианты типа:
- requirements_win64.txt
- requirements_CPU.txt
- requirements_GPU.txt
... и т.п., по приписке которых становится понятно, для чего именно предназначен список "пакетов", перечисленный в конкретном файле.
Пакетов может быть 1-2, или 20-40, их число не ограничено. И в задачу UV входит все эти пакеты установить. Он потому и называется "менеджер пакетов", потому что его основная задача - установить все эти пакеты в библиотеку (venv) для обеспечения работоспособности вашей программы.
Пакеты "скопом" устанавливаются одной командой:
- uv pip install -r диск:\папка\папка\requirements.txt
... т.е. надо указать полный путь к файлу если он не в текущей папке.
UV прочитает список пакетов в папке, скачает их и установит в текущее "venv".
Вот, собственно, и все, что нужно знать про установку пакетов с помощью UV. Тут все очень просто, если кто-то пользовался менеджером PIP, то команды точно такие же, только перед командой ставиться "uv". Вот примерный образец команд:
- uv pip install torch
- uv pip install torch==128
- uv pip install torch numpy yarl>=1.18.0 SQLAlchemy
Т.е. все в том же порядке, как и с PIP.
Деинсталляция точно так же, только вместо "install" пишется "uninstall".
Поскольку UV сам является менеджером пакетов, то по умолчанию он не ставит старый менеджер PIP и некоторые пакеты, но используя ключ:
- uv venv -- seed
... вы можете дать ему команду их установить. А можете установить нужные пакеты вручную через:
- uv pip install pip whell setuptools
Можно создать системную переменную с явным перечнем:
- UV_VENV_SEED=pip,setuptools,wheel
Seed полезен, если вы хотите использовать инструменты, которые прямо вызывают pip внутри интерпретатора (Jupyter-ячейки с %pip, старые скрипты и т.п.). Кроме того, многие старые программы не знают про UV и будут использовать "pip" напрямую.
Но идеология uv такова: для управления пакетами лучше пользоваться самим uv (uv pip, uv run и т.д.), а не напрямую pip, поэтому seed нужен не всегда.
Нужна ли ручная активация venv? (короткий практический ответ)
Нет, ручная активация не обязательна если вы работаете через команды uv. Объяснение: uv умеет запускать команды внутри .venv без того, чтобы вы сначала сделали source .venv/bin/activate. Достаточно вызвать:
uv run my_script.py
uv pip install <пакет>
— uv сам найдёт .venv в текущей папке (или создаст его при необходимости) и выполнит команду в нужном окружении. Активация нужна лишь тогда, когда вы хотите в текущей сессии shell напрямую использовать python/pip без префикса uv. В этом случае активируете как обычно:
- .venv\Scripts\activate
Если вы предпочитаете всегда работать через uv-команды — активация почти никогда не понадобится.
Как явно запросить Python у uv (когда хочется контролировать)
Если вы любите всё контролировать, сначала попросите uv установить версию, а затем создайте venv на её основе:
- uv python install 3.11
- uv venv --python 3.11
Команда uv python install сама скачает интерпретатор и зарегистрирует его у uv. После этого uv venv --python 3.11 использует именно эту установленную версию. Если вы не сделали uv python install, uv venv --python 3.11 всё равно попытается найти и при необходимости скачать версию автоматически.
Как быстро проверить, какой Python используется (практические одношаговые проверки)
- uv python list — покажет все uv-управляемые версии, которые уже установлены.
- uv python dir — покажет директорию, куда uv ставит Python.
- uv run --python 3.11 python -c "import sys; print(sys.executable)" — запустит интерпретатор 3.11 (uv скачает его, если нужно) и выведет путь к исполняемому файлу.
В shell после активации окружения можно использовать where python — это покажет, откуда берётся python в текущем shell.
Важная оговорка про «доступность» версий Python у uv
UV поддерживает определённый набор дистрибутивов, которые «заморожены» для каждой версии uv. Если выходит очень новая версия Python, может понадобиться обновить сам uv, чтобы она стала доступна через uv python install. То есть если uv не видит нужную совсем свежую патч-версию, попробуйте обновить uv и повторить установку.
Короткие сценарии — как это выглядит в реальных командах
Быстро создать venv и запустить скрипт (ничего не ставите вручную):
- uv venv --python 3.11
- uv run my_script.py
Явно поставить интерпретатор и проверить его путь:
- uv python install 3.12
- uv run --python 3.12 python -c "import sys; print(sys.executable)"
Полезные замечания и «подводные камни»
По умолчанию uv предпочитает свои собственные (managed) версии Python. Если вы хотите использовать только системный Python — есть флаги, которые запрещают использование managed-инсталляций.
Если вам нужна полная совместимость со старыми инструментами, которые прямо вызывают pip внутри процесса, используйте --seed, иначе эти вызовы могут инсталлировать пакеты в системный Python по ошибке.
UV полезен тем, что вы не зависите от предустановленного Python — uv сам скачает то, что нужно, и сделает uv venv --seed. Это удобно для одноразовой установки ComfyUI или другого приложения: uv поднимет версию и окружение сам.
Список полезных команд UV
(фокус на установке venv с указанием версии Python, проверке где стоит Python и смежных действиях. Команды упорядочены логично — сначала установка инструментов, потом Python, потом создание venv и проверка).
- curl -LsSf https://astral.sh/uv/install.sh | sh
— установить uv на macOS/Linux (быстрый способ). - powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
— установить uv на Windows. - uv --version
— проверить, что uv установлен и какая версия. - uv help
— общая справка по uv. - uv python list
— показать установленные uv-управляемые версии Python. - uv python dir
— показать каталог, куда uv кладёт свои Python-инсталляции. - uv python find 3.11
— найти подходящую инсталляцию Python, удовлетворяющую запросу. - uv python install 3.12
— установить (скачать) Python 3.12. - uv python install 3.11 3.12
— установить сразу несколько версий. - uv python install 3.12 --default
— установить python3.12 и сделать python/python3 доступными (экспериментально). - uv python uninstall 3.12
— удалить uv-управляемую инсталляцию Python. - uv python update-shell
— добавить директорию uv-managed Python в PATH (helper для shell). - uv python pin 3.11
— зафиксировать (pin) версию Python для текущего каталога (создаёт .python-version). - uv venv
— создать виртуальное окружение .venv в текущей папке (uv скачает Python, если нужно). - uv venv myenv
— создать venv с именем/путём myenv. - uv venv --python 3.11
— создать venv, используя Python 3.11 (uv установит 3.11 при отсутствии). - uv venv --seed
— создать venv, уствновив базовые утилиты (pip/setuptools/wheel) внутри. - UV_VENV_SEED=pip uv venv
— тот же seed через переменную окружения. - uv run my_script.py
— запустить my_script.py внутри .venv, не активируя его вручную. - uv pip install <package>
— установить пакет в активное (или найденное) окружение через uv-подход, не ставя в системный Python. - uv pip uninstall <package>
— удалить пакет из окружения. - uv pip list
— показать пакеты в текущем окружении. - uv pip freeze
— вывести замороженный список пакетов (аналог pip freeze). - uv pip tree
— показать дерево зависимостей в окружении. - uv pip show <package>
— информация о пакете внутри окружения. - uv pip check
— проверить консистентность установленных пакетов. - uv pip compile
— собрать lock/requirements (аналог pip-tools). - uv pip sync <requirements.txt>
— синхронизировать окружение по списку. - uv run -- <command>
— разделитель: всё после -- передаётся в исполняемый скрипт, а не парсится как опции uv. (полезно при сложных аргументах). - uv tool run <tool> или uvx <tool>
— запустить инструмент в временном окружении (pipx-подобно). - uv tool install <tool>
— установить инструмент в пользовательскую папку uv (постоянно). - uv tool list
— список установленных инструментов. - uv tool update-shell
— добавить путь к инструментам uv в PATH (обновить shell). - uv cache dir
— показать каталог кэша uv. - uv cache clean
— очистить кэш. - uv cache prune
— очистить старые элементы кэша. - uv self update
— обновить сам uv. - uv self version
— показать версию uv. - uv python find '>=3.10,<3.12'
— искать версию по диапазону ограничений. - uv run --python /path/to/custom/python python -c "print('ok')"
— запустить команду с явным путём к интерпретатору (если нужно использовать конкретный локальный python).
Короткий чеклист действий при проблемах (наиболее частые случаи)
- uv не видит новую версию Python?
Попробуйте uv self update, затем uv python install <версия>. - Внутри .venv нет pip?
Пересоздайте venv с --seed или выполните uv pip install pip. - Хочу убедиться, что команда использует не системный Python:
uv run python -c "import sys; print(sys.executable)".
UV снимает с вас бОльшую часть рутины: он ставит нужную версию Python (по требованию), создаёт venv и умеет запускать команды внутри него без ручной активации. Для задач вроде быстрой установки это идеальный инструмент: один uv-командой вы получите изолированное окружение с нужным интерпретатором и сможете сразу запускать инсталляцию приложения. Только помните про --seed, если вам нужен pip внутри окружений для старых инструментов, и про то, что новые версии Python могут появиться в списке только после обновления самого uv.
Кого заинтересовало - читайте всю подборку, толькло учтите, что информация в каждой статье актуальна на дату написания статьи.
NStor