В статье рассматривается менеджер пакетов питона "UV" применительно к использованию его в нейросетях , в частности формата "Stable Duffusion" и интерфейса "ComfyUI". Мы рассматриваем его Windows-версию (относительно написания путей и команд), хотя основной синтаксис его команд одинаков во всех остальных его версиях (Linux, MAC).
Что это такое
- UV - чрезвычайно быстрый пакет Python и менеджер проектов, написанный на языке Rust.
Поскольку UV может устанавливать не только пакеты питона, но и сам питон (Python), а также создавать и работать с его виртуальными окружениями, то его смело можно назвать:
- Менеджер Python, пакетов Python и его виртуальных окружений
Во время его установки UV может обнаружить имеющиеся версии питона, настроиться на них, и работать с ними заменяя собой менеджер PIP, но я не рекомендую это делать, т.к. UV может устанавливать Python из собственного репозитория, которые (по моим наблюдениям!) работаю быстрее.
Далее я рассматриваю наиболее удобную и беспроблемную (стандартную) организацию работы с UV в системе Windows.
Установка UV на Windows
Лучше всего устанавливать через PowerShell
- powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
Можно запросить конкретную версию UV, включив ее в URL:
$ powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/0.5.21/install.ps1
После этого два файла:
- uv.exe
- uvx.exe
... установятся в папку
- %HOMEPATH%\.Local\bin\
Кроме того, установщик или двоичные файлы можно загрузить непосредственно с GitHub: https://github.com/astral-sh/uv/releases
UV должен быть "в PATH", что надо проверить, перейдя в случайный каталог и выполнить там команду:
- uv --version
Обновление версии UV производится командой
- uv self update
Вот так выглядит обновления UV (он обновился пока писал статью)
Команда вызова справки UV выведет в терминал справку по командам UV
- uv --help
Команда вызова справки UVX (eXtended - расширенная "uv-tools") выведет в терминал справку по командам UVX
- uvx --help
Для удаления UV просто удалите эти два файла из папки:
- uv.exe
- uvx.exe
rm %HOMEPATH%\.Local\bin\uv.exe
rm %HOMEPATH%\.Local\bin\uvx.exe
До версии 0.5.0 uv устанавливался в ~/.cargo/bin. Бинарники можно удалить оттуда для удаления. Обновление со старой версии не приведет к автоматическому удалению бинарников из ~/.cargo/bin
Очистка кэша UV
Очистка сохраненных данных кэша (необязательно):
uv cache clean
rm -r uv python dir
rm -r uv tool dir
Две последние папки UV создает по необходимости, если ставит свой Python (что предпочтительнее!) , и, если вы пользуетесь UV еще и в других целях (кроме как менеджер пакетов питона для ComfyUI), то UV может установить еще компоненты.
Ниже указаны команды запроса текущих путей, куда UV поставил(т) Python и Tools.
- uv python dir
- uv tool dir
Очистку кэша надо иметь в виду, поскольку UV создает свой собственный "кэш", который располагается по пути:
- %HOMEPATH%\AppData\Local\uv\cache
UV не пользуется кэшем PIP, а создает свой собственный, что связано с идеологией поиска и выбора пакетов для установки.
Это все места, где UV может "намусорить", и их надо знать, чтобы иметь возможность почистить систему от него
Более подробно смотрите тут:
Установка Python
Следует отметить одну особенность UV:
- UV сам устанавливает питона (если он еще не установлен, или если не установлена нужная его версия) при первой же "необходимости".
По умолчанию версии Python автоматически загружаются по мере необходимости без использования "uv python install".
Что это значит? Это значит, что
Если я дам UV команду на выполнение PY-файла, или на создание "виртуального окружения", если я выполню ЛЮБОЕ ДЕЙСТВИЕ, для выполнения которого нужен Python, то UV его сам установит перед выполнением этого действия!
Вручную же Python устанавливается следующим образом
(я привожу просто "разнообразие команд"):
- uv python install
- uv python uninstall (УДАЛЕНИЕ!!!)
- uv python install 3.12
- uv python install 3.12.3
- uv python install 3.9 3.10 3.11 3.12
- uv python install '>=3.8,<3.10'
Чтобы установить определенную реализацию:
- uv python install pypy
- uv python install pypy@3.10
Все версии питона установятся в папку, место которой можно узнать командой:
- uv python dir
По умолчанию это папка:
- %HOMEPATH%\AppData\Roaming\uv\python
Выполните команду:
- dir %HOMEPATH%\AppData\Roaming\uv\python
... и увидите папки с питонами.
Запросить какие версии питона доступны UV для установки можно командой:
- uv python list
- uv python list --only-installed
- uv python list --all-versions
- uv python list --all-platforms
Чтобы найти исполняемый файл Python, используйте команду:
- uv python find
По умолчанию это отобразит путь к первому доступному исполняемому файлу Python. Чтобы найти python.exe нужной версии, введите команду:
- uv python find 3.10
- uv python find 3.12
- uv python find >=3.9
- uv python find <=3.9
По умолчанию "uv python find" будут включены версии Python из виртуальных сред. Если ".venv" каталог найден в рабочем каталоге или любом из родительских каталогов или "VIRTUAL_ENV" установлена переменная среды, он будет иметь приоритет над любыми исполняемыми файлами Python в PATH.
Чтобы игнорировать виртуальные среды, используйте "--system" флаг:
- uv python find --system
Примечание
Т.к. при установке питона, если не указана требуемая версия, UV загружает последнюю из стабильных версий, то со временем вы можете утсановить в папку с питонами (AppData\Roaminv\uv\python) много различных "минорных" версий питона, что, с одной стороны плохо (т.к. замусоривает диск), с другой стороны это гарантирует стабильность написанных вами приложений, если вы занимаетесь их разработкой и обеспечивает лучшую "изоляцию" сред.
С другой стороны, имеющееся или написанное приложение на PY всегдя можно переключить на другую версию питона изменив ее норме или в файле конфигурации ".venv", или в TOML-файле. Тестируйте, и все получится. Но вообще - держать всегда в голове номер нужной версии питона и других компонентов, это нормальное положени е дел для пользователя питона и неййросетей.
Отключение автоматических загрузок Python
По умолчанию UV автоматически загружает версии Python при первой необходимости.
Параметр "python-downloads" можно использовать для отключения этого поведения. По умолчанию он установлен на "automatic", установите на "manual", чтобы разрешить загрузки Python только во время "uv python install".
Параметр
python-downloads
можно задать в постоянном файле конфигурации, чтобы изменить поведение по умолчанию, или
--no-python-downloads
флаг можно передать любой команде uv.
Файлы конфигурации
UV поддерживает постоянные файлы конфигурации формата TOML как на уровне проекта, так и на уровне пользователя.
Формат файла TOML не относится к теме, обсуждаемой здесь, ищи информацию самостоятельно. Я разберу только разделы, касающиеся установки TORCH-CUDA.
Перед началом работы с каким-то проектом (да и просто "для понимания структуры" проекта), стоит начинать всегда с:
- создания нового каталога с именем проекта
- дать команду "uv init" в этом каталоге
- UV создаст все необходимые ему (и не только ему) файлы, в том числе и файл "pyproject.toml" и заполнит эти файлы начальной информацией.
Можете посмотреть содержимое этих файлов, что-то изменить в них, или просто удалить, потом, при необходимости, вновь создать их той же командой.
UV будет искать "pyproject.toml" и "uv.toml" файлы в текущем каталоге или в ближайшем родительском каталоге.
Если вы после "uv init" дадите еще и команду 'uv run', то тут же будет создано и ".venv" в соответствии с параметрами из файла конфигурации.
Если перед этим вы заполните параметр "dependencies" то все пакеты, перечисленные в нем, будут утсановлены в ".venv" и набор пакетоа, перечисленный в этом разделе ВСЕГДА будет обновляться пред стартом приложения, работающего на этом ".venv"
Если вы сюда что-то добавите, оно установится, если что-то удалите, оно удалится из ".venv" перед стартом.
Вы можете вообще удалить VENV, оно моментально будет воссоздано перед стартом приложения из этого TOML-файла.
Это и есть "стандартный" подход к передаче списка пакетов для приложения. Вы передаете или сохраняете только TOML-файл, а в нем уже описаны все параметры, версии и пакеты, кторые требуются для создания VENV.
Более подробно читайте тут:
https://astral.sh/blog/uv-unified-python-packaging
Примечание
"uv.toml" файлы имеют приоритет над "pyproject.toml" файлами, поэтому, если в каталоге присутствуют оба файла, последний будет проигнорирован.
Примечание
Для "tool" команд, которые работают на уровне пользователя, локальные файлы конфигурации будут игнорироваться. Вместо этого "uv" будет читать исключительно из конфигурации уровня пользователя (например, ~/.config/uv/uv.toml) и конфигурации уровня системы (например, /etc/uv/uv.toml).
Примечание
Настройки, предоставляемые через переменные среды, имеют приоритет над постоянной конфигурацией, а настройки, предоставляемые через командную строку, имеют приоритет над обоими.
UV принимает "--no-config" аргумент командной строки, который, если он указан, отключает обнаружение любой постоянной конфигурации.
UV также принимает "--config-file" аргумент командной строки, который принимает путь к "uv.toml" файлу конфигурации. При предоставлении этот файл будет использоваться вместо любых обнаруженных файлов конфигурации (например, конфигурация на уровне пользователя будет проигнорирована).
Создание виртуальной среды (виртуального окружения)
Идеология UV состоит в следующем:
- установленные UV версии Python считаются "системными" и являются "базой" для создания ни их основе "виртуальных окружений (сред)"!
- вся работа должна производиться только в "виртуальных окружениях"!
Именно поэтому сами "базовые питоны" спрятаны "от глаз подальше", что, однако, не мешает использовать "ручное вмешательство" в виртуальные среды и вручную (или ключами и изменением параметров) включать "наследование пакетов питона от родителя" (привет "--system-file-packages").
Команда создания виртуальной среды:
- uv venv
Примечание
Я рекомендую всегда использовать имя "venv" и создавать окружение "в текущей папке", тогда, при исполнении BAT-файлов (если папка с ".venv" текущая!), не надо активировать venv, т.к. UV сам активирует ее и в нее войдет!!! Иначе начнется "пляска с бубном"!!!
Можно указать конкретное имя или путь, например, для создания виртуальной среды по адресу my-name:
- uv venv my-name
Примечание
Не советую!!! Причина — смотри предыдущее примечание!
UV "по умолчанию" ищет папку ".venv" !!
Можно указать версию Python:
- uv venv --python 3.11
Обратите внимание, что для этого требуется, чтобы запрошенная версия Python была доступна в системе. Однако, если она недоступна, UV загрузит Python (если автоматическая загрузка не отключена в конфигурации).
При использовании имени виртуальной среды по умолчанию uv будет автоматически находить и использовать виртуальную среду при последующих вызовах.
uv venv
uv pip install ruff
Виртуальную среду можно «активировать» вручную (как обычно):
- .venv\Scripts\activate
Управление пакетами
Установка пакетов
Чтобы установить пакет в виртуальную среду, например, Flask:
- uv pip install flask
Чтобы установить пакет с включенными дополнительными зависимостями, например, Flask с дополнительным пакетом «dotenv»:
- uv pip install "flask[dotenv]"
Чтобы установить несколько пакетов, например, Flask и Ruff:
- uv pip install flask ruff
Чтобы установить пакет с ограничением, например, Ruff v0.2.0 или новее:
- uv pip install 'ruff>=0.2.0'
Чтобы установить пакет определенной версии, например, Ruff v0.3.0:
- uv pip install 'ruff==0.3.0'
Чтобы установить пакет с диска:
- uv pip install "ruff @ ./projects/ruff"
Чтобы установить пакет из GitHub:
- uv pip install "git+https://github.com/astral-sh/ruff"
Чтобы установить пакет из GitHub по определенной ссылке (tag, commit, branch):
- uv pip install "git+https://github.com/astral-sh/ruff@v0.2.0"
- uv pip install "git+https://github.com/astral-sh/ruff@1fadefa67b26508cc59cf38e6130bde2243c929d"
- uv pip install "git+https://github.com/astral-sh/ruff@main"
Установка из файла:
- uv pip install -r requirements.txt
Установить из "pyproject.toml" файла:
- uv pip install -r pyproject.toml
Установка из "pyproject.toml" файла с включенными дополнительными зависимостями, например, с дополнительным файлом "foo":
- uv pip install -r pyproject.toml --extra foo
Установка из "pyproject.toml" файла со всеми включенными необязательными зависимостями:
- uv pip install -r pyproject.toml --all-extras
Удаление пакетов
Чтобы удалить пакет, например Flask:
- uv pip uninstall flask
Чтобы удалить несколько пакетов, например, Flask и Ruff:
- uv pip uninstall flask ruff
Идеология замены PIP:
Все то же самое, что и PIP, но вместо "PIP" будет "UV PIP"
Установка PyTorch (TORCH-CUDA)
(полный текст pyproject.toml смотри в конце раздела)
С точки зрения установки PyTorch имеет несколько необычных характеристик:
- Многие пакеты PyTorch размещены на отдельном индексе, а не на Python Package Index (PyPI). Таким образом, установка PyTorch часто требует настройки проекта для использования индекса PyTorch.
- PyTorch создает отдельные сборки для каждого типа процессора (например, CPU-only, CUDA). Поскольку не существует стандартизированного механизма для указания этих пакетов при публикации или установке, PyTorch кодирует их в локальном спецификаторе версии. Поэтому версии PyTorch будут выглядеть как 2.5.1+cpu, 2.5.1+cu121и т. д.
- Сборки для разных процессоров публикуются в разных индексах. Например, +cpu сборки публикуются на https://download.pytorch.org/whl/cpu , а +cu121сборки публикуются на https://download.pytorch.org/whl/cu121 .
Таким образом, необходимая конфигурация пакета будет зависеть как от платформы, которая вам нужна, так и от процессорос, которые вы хотите настроить.
Для начала рассмотрим следующую (стандартную) конфигурацию, которая будет создана путем запуска uv init --python 3.12 с последующим запуском
- uv add torch torchvision
В этом случае PyTorch будет установлен из PyPI, который размещает CPU-версии для Windows и macOS, а также GPU-версии для Linux (ориентированные на CUDA 12.4):
[project]
name = "project"
version = "0.1.0"
requires-python = ">=3.12"
dependencies = [
"torch>=2.5.1",
"torchvision>=0.20.1"
]
Это допустимая конфигурация для проектов, которые хотят использовать сборки ЦП на Windows и macOS, а также сборки с поддержкой CUDA на Linux. Однако, если вам нужна поддержка различных платформ или процессоров, вам нужно будет настроить проект соответствующим образом.
Использование экстра-индекса PyTorch
В некоторых случаях вы можете захотеть использовать определенный вариант PyTorch на всех платформах. Например, вы можете захотеть использовать сборки CPU-only и на Linux.
В таких случаях первым шагом будет добавление соответствующего индекса PyTorch в ваш "pyproject.toml":
Только CPU
[[tool.uv.index]]
name = "pytorch-cpu"
url = "https://download.pytorch.org/whl/cpu"
explicit = true
CUDA 11.8
[[tool.uv.index]]
name = "pytorch-cu118"
url = "https://download.pytorch.org/whl/cu118"
explicit = true
CUDA 12.1
[[tool.uv.index]]
name = "pytorch-cu121"
url = "https://download.pytorch.org/whl/cu121"
explicit = true
CUDA 12.4
[[tool.uv.index]]
name = "pytorch-cu124"
url = "https://download.pytorch.org/whl/cu124"
explicit = true
Рекомендуется использовать , "explicit = true" чтобы гарантировать, что индекс используется только для torch, torchvisionи других пакетов, связанных с PyTorch, в отличие от общих зависимостей, таких как "jinja2", которые должны по-прежнему получаться из индекса по умолчанию (PyPI).
Следует обновить в "pyproject.toml" точку перехода torch и torchvision на нужный экстра-индекс:
Только PCU
[tool.uv.sources]
torch = [
{ index = "pytorch-cpu" },
]
torchvision = [
{ index = "pytorch-cpu" },
]
PyTorch не публикует сборки CUDA для macOS. Таким образом, мы включаем platform_system команду uv игнорировать индекс PyTorch при разрешении для macOS:
CUDA 12.4
[tool.uv.sources]
torch = [
{ index = "pytorch-cu124", marker = "platform_system != 'Darwin'"},
]
torchvision = [
{ index = "pytorch-cu124", marker = "platform_system != 'Darwin'"},
]
В качестве полного примера, следующий проект будет использовать сборки PyTorch, предназначенные только для ЦП, на всех платформах:
[project]
name = "project"
version = "0.1.0"
requires-python = ">=3.12.0"
dependencies = [
"torch>=2.5.1",
"torchvision>=0.20.1",
]
[tool.uv.sources]
torch = [
{ index = "pytorch-cpu" },
]
torchvision = [
{ index = "pytorch-cpu" },
]
[[tool.uv.index]]
name = "pytorch-cpu"
url = "https://download.pytorch.org/whl/cpu"
explicit = true
В некоторых случаях вам может потребоваться использовать сборки только с использованием CPU в одной среде (например, macOS и Windows), а сборки с поддержкой CUDA — в другой (например, Linux).
С помощью tool.uv.sources можно использовать маркеры окружения, чтобы указать нужный индекс для каждой платформы. Например, следующая конфигурация будет использовать сборки PyTorch только для CPU в Windows (и macOS, путем возврата к PyPI), а также сборки с поддержкой CUDA в Linux:
[project]
name = "project"
version = "0.1.0"
requires-python = ">=3.12.0"
dependencies = [
"torch>=2.5.1",
"torchvision>=0.20.1",
]
[tool.uv.sources]
torch = [
{ index = "pytorch-cpu", marker = "platform_system == 'Windows'" },
{ index = "pytorch-cu124", marker = "platform_system == 'Linux'" },
]
torchvision = [
{ index = "pytorch-cpu", marker = "platform_system == 'Windows'" },
{ index = "pytorch-cu124", marker = "platform_system == 'Linux'" },
]
[[tool.uv.index]]
name = "pytorch-cpu"
url = "https://download.pytorch.org/whl/cpu"
explicit = true
[[tool.uv.index]]
name = "pytorch-cu124"
url = "https://download.pytorch.org/whl/cu124"
explicit = true
В некоторых случаях вам может потребоваться использовать сборки только для ЦП, а в других — сборки с поддержкой CUDA, причем выбор переключается с помощью предоставленного пользователем дополнительного параметра (например, uv sync --extra cpuвместо uv sync --extra cu124).
С помощью tool.uv.sources можно использовать дополнительные маркеры для указания нужного индекса для каждого включенного дополнительного. Например, следующая конфигурация будет использовать CPU-only PyTorch для uv sync --extra cpuи сборки с поддержкой CUDA для uv sync --extra cu124:
[project]
name = "project"
version = "0.1.0"
requires-python = ">=3.12.0"
dependencies = []
[project.optional-dependencies]
cpu = [
"torch>=2.5.1",
"torchvision>=0.20.1",
]
cu124 = [
"torch>=2.5.1",
"torchvision>=0.20.1",
]
[tool.uv]
conflicts = [
[
{ extra = "cpu" },
{ extra = "cu124" },
],
]
[tool.uv.sources]
torch = [
{ index = "pytorch-cpu", extra = "cpu" },
{ index = "pytorch-cu124", extra = "cu124" },
]
torchvision = [
{ index = "pytorch-cpu", extra = "cpu" },
{ index = "pytorch-cu124", extra = "cu124" },
]
[[tool.uv.index]]
name = "pytorch-cpu"
url = "https://download.pytorch.org/whl/cpu"
explicit = true
[[tool.uv.index]]
name = "pytorch-cu124"
url = "https://download.pytorch.org/whl/cu124"
explicit = true
Полный текст pyproject.toml для установки TORCH-CUDA приведен на скриншоте ниже:
Можете просто скопировать эти разделы отсюда:
[project]
name = "video"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.12"
dependencies = [
"torch",
"torchvision",
"torchaudio"
]
[[tool.uv.index]]
name = "pytorch-cu124"
url = "https://download.pytorch.org/whl/cu124"
explicit = true
[tool.uv.sources]
torch = [
{ index = "pytorch-cu124", marker = "platform_system != 'Darwin'"},
]
torchvision = [
{ index = "pytorch-cu124", marker = "platform_system != 'Darwin'"},
]
torchaudio = [
{ index = "pytorch-cu124", marker = "platform_system != 'Darwin'"},
]
Все это касается создания и восстановления создания VENV с использованием pyproject.toml файла.
При этом никто не отменял использование обычной установки через команду:
uv pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
Восстановление VENV из pyproject.toml-файла
Синхронизация VENV с пакетами из TOML-файла (если что-то поломалось или удалилось) и восстановление пакетов делается по команде:
- uv sync
... все несоответствия реальных пакетов и пакетов в TOML-файле будут убраны и восстановлено то, что в TOML-файле описано. Если удалено само VENV, оно будет восстановлено.
Больше информации о формате TOML-файла проекта читай тут:
https://packaging.python.org/en/latest/guides/writing-pyproject-toml
Назначение LOCK-файла
uv создает uv.lock файл рядом с pyproject.toml.
uv.lock — это универсальный или кроссплатформенный файл блокировки, который фиксирует пакеты, которые будут установлены для всех возможных маркеров Python, таких как операционная система, архитектура и версия Python.
В отличие от pyproject.toml, который используется для указания общих требований проекта, файл блокировки содержит точные версии, которые установлены в среде проекта. Этот файл может быть использован в системе контроля версий, что позволяет выполнять воспроизводимые установки на разных машинах.
Файл блокировки гарантирует, что разработчики, работающие над проектом, используют согласованный набор версий пакетов. Кроме того, он гарантирует, что при развертывании проекта как приложения известен точный набор используемых версий пакетов.
Файл блокировки создается и обновляется во время вызовов uv, которые используют среду проекта, т. е.:
- uv sync
- uv run
Файл блокировки также может быть явно обновлен с помощью:
- uv lock.
uv.lock является читаемым человеком файлом TOML, но управляется uv и не должен редактироваться вручную. В настоящее время не существует стандарта Python для lockfiles, поэтому формат этого файла специфичен для uv и не может использоваться другими инструментами.
Если необходимо интегрировать uv с другими инструментами или рабочими процессами, можно экспортировать uv.lock в requirements.txt формат с помощью:
- uv export --format requirements-txt
Сгенерированный requirements.txt файл затем можно установить с помощью:
- uv pip install
... или с помощью других инструментов, таких как pip.
Разберем установку и запуск ComfyUI с помощью UV
Это, на мой взгляд, намного проще, чем через PIP.
1. Создадим новую папку "Комфи" на диске "c:\" (скопируйте и выполните следующую команду)
- cd /d c:\ && md c:\Комфи && cd c:\Комфи
2. Скачайте файл по ссылке и поместите его в эту папку
https://github.com/Nestorchik/Dzen/releases/download/dzen/pyprojct.toml
3. Откроем файл в блокноте (или любом редакторе) и изменим в нем только то, что обведено зеленым, кроме версии питона. Это название проекта, описание и версия, это просто "для информации", не более.
4. У меня получилось так (5 строку я вообще удалил)
Все, что ниже обведенного зеленым - НЕ ТРОГАЕМ!!!
Я там прописал самое трудное - установку TORCH-CUDA для карт NVIDIA!!!
5. Скачаем ComfyUI с Git командой:
Следите за логом скачивания, чтобы убедиться, что связь с gitHub не оборвалась и все закачалось успешно!!!
6. Откроем в блокноте файл:
- c:\Комфи\ComfyUI\requirements.txt
Красными стрелками отмечены те пакеты питона, которые у нас УЖЕ прописаны в скачанном "pyproject.toml", где прописана установка их CUDA-версий.
7. С каждой строкой из файла "requirements.txt" (кроме трех строк с торчами) выполняем команду:
- uv add <строка>
Примечание
uv add - добавление пакета
uv remove - удаление пакета
Примечание: Все команды в терминале мы выполняем ПРИ ТЕКУШЕМ каталоге "c:\Комфи"
Можно "конкатировать" все команды в одну строку соединим команды знаками "&&", как тут (можете просто скопировать):
- uv add torchsde && uv add numpy>=1.25.0 && uv add einops && uv add transformers>=4.28.1 && uv add tokenizers>=0.13.3 && uv add sentencepiece && uv add safetensors>=0.4.2 && uv add aiohttp && uv add pyyaml && uv add Pillow && uv add scipy && uv add tqdm && uv add psutil && uv add kornia>=0.7.1 && uv add spandrel && uv add soundfile
Вот такая колбаса получилась )
8. Копируем команду и выполняем ее в текущем c:\Комфи каталоге:
У нас автоматически создалось "виртуальное окружение" с именем ".venv" (привыкните работать именно с этим именем!!!) и .lock-файл с точным описанием каждого пакета, установленного в наше ".venv".
Файлы, отмеченные красным (нулевой длины) можно удалить.
9. Теперь командой:
- uv add pip
... мы установим пакет "pip", которого в составе UV-питона нет (но об этом не знают остальные компоненты ComfyUI, которые будут его искать)
10. Теперь откроем файл "pyproject.toml"
В нем мы увидим, что UV сам внес в файл проекта все пакеты, которые проекту нужны. Это аналогия файлу "requirements.txt" в составе "ComfyUI".
Примечание
UV создал нам VENV и все пакеты вписал в TOML-файл. Теперь, если мы удалим VENV вообще, ничего страшного, UV нам его восстановит при первом же к нему обращении.
Вы заметили, что мы не устанавливали сам питон, поскольку, раз у нас в "проекте" записана версия питона, а он у нас не установлен, UV его установит САМ нас даже не спрашивая.
Идеология такова: объекты, которые нужны для работы, могут быть созданы "на лету", автоматически создаются UV.
11. Установка Менеджера ComfyUI
- git clone https://github.com/ltdrdata/ComfyUI-Manager.git c:\Комфи\ComfyUI\custom_nodes\ComfyUI-Manager
12. Запуск ComfyUI
Поскольку у нас установлены сам ComfyUI, установлен его Менеджер, установлены все пакеты питона от ComfyUI + пакет PIP (который будут искать компоненты ComfyUI), то мы готовы к запуску.
Командная строка запуска через UV состоит из:
- uv run <файл приложения.PY> <ключи приложения>
... то команда запуска ComfyUI со всеми рекомендуемыми ключами будет выглядеть так:
- uv run c:\Комфи\ComfyUI\main.py --windows-standalone-build --front-end-version Comfy-Org/ComfyUI_frontend@latest
Вот собственно и все.
13. Теперь удалим ".venv" и выполним запуск ComfyUI еще раз
Произойдет запуск ComfyUI, но перед этим ".venv" будет создано и проинсталлировано по информации из "pyproject.toml" файла.
При этом создание VENV и установка в него ВСЕХ пакетов включая TORCH-CUDA займет... меньше 4 секунд.
=============================================
Пример 1:
Разберем установку ComfyUI yна UV "по шагам"
BAT-файл установки на GIT:
Опишу только основные шаги:
=== начало ===
1. Установка UV (само встанет куда надо)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
2. Создаем новый пустой каталог, делаем его текущим и в нем открываем терминал.
3. Устанавливаем в текущий каталог сам ComfyUI
git clone https://github.com/comfyanonymous/ComfyUI.git
4. Устанавливаем менеджера ComfyUI (поскольку у GIT версию ComfyUI он не входит)
git clone https://github.com/ltdrdata/ComfyUI-Manager.git "%CD%\ComfyUI\custom_nodes\ComfyUI-Manager"
5. Создаем "виртуальное окружение" питона (UV уже установили ранее в п.1, его и вызываем)
uv venv --python 3.12
6. Устанавливаем САМЫМ ПЕРВЫМ именно TORCH-CUDA пакет (venv не активируем, поскольку папка ".venv" находится в текущей папке и UV сам его обнаружит и активирует)
uv pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
7. Установим в питона менеджер пакетов PIP (поскольку ComfyUI и его ноды могут не знать о UV и с ним не работать, то они будут вызывать PIP для установки, а поскольку в составе UV-питона менеджером является сам UV, то пакет PIP в него НЕ ВКЛЮЧЕН!!!)
uv pip install pip
8. Установим все зависимости (рекварименты, пакеты) ComfyUI из его папки (переменная %CD% возвращает "текущий каталог", его и подставим для "абсолютного пути")
uv pip install -r "%CD%\ComfyUI\requirements.txt"
9. (1 строка бат-файла)Генерируем и сохраняем "run.bat" файл запуска ComfyUI в текущем каталоге (сделать каталог "текущим")
echo cd "%CD%" >run.bat
10. (Вторая строка бат-файла) Записать команду запуска питона через UV (uv run) с подстановкой в команды текущих путей к файлу запуска ComfyUI "main.py" в его каталоге + команды настройки на последнюю версию "фронтэнда" (как тог требует ComfyUI (считайте это "волшебным заклинанием").
echo uv run "%CD%\ComfyUI\main.py" --windows-standalone-build --front-end-version Comfy-Org/ComfyUI_frontend@latest >>run.bat
11. Чтобы окно напуска ComfyUI не закрылось после выхода из него (чтобы можно было хоть логи ошибок посмотреть в случае "вылета"!!!!!!!), вставим паузу "до нажатия любой клавиши".
echo pause >>run.bat
12. Файл запуска "run.bat" сохранен в текущий каталог, теперь та же команда запуска ComfyUI - просто запускаем его первый раз после установки
uv run "%CD%\ComfyUI\main.py" --windows-standalone-build --front-end-version Comfy-Org/ComfyUI_frontend@latest
13. Чтобы окно установки не закрылось - вставим "паузу" (чтобы можно было хоть логи ошибок посмотреть в случае "вылета"!!!!!!!)
pause
=== конец примера 1 ===
Пример 2:
Разберем установку TORCH-CUDA c помощью TOML-файла через UV RUN
1. Создаем новый каталог, делаем его текущим и запускаеи из него терминал
2. Кидаем в каталог вот этот файл (скачать) https://github.com/Nestorchik/Dzen/releases/download/dzen/pyproject.toml
3. Даем команду:
- uv run
... uv обнаружит файл 'pyproject.toml' , создаст окружение '.venv' и начнет у него установку 'torch-cuda', во время которой создаст LOCK-файл.
=== конец примера 2 ===
=============================================
СТАТЬЯ НЕ ЗАКОНЧЕНА!!!
ВОПРОСЫ И ПОЖЕЛАНИЯ - В КОММЕНТАРИИ!!!
=============================================
Статья будет постоянно дописываться и обновляться... "рефрешьте"