Найти в Дзене

"UV" менеджер пакетов "Python" документация на русском (с примерами и примечаниями).

Оглавление

В статье рассматривается менеджер пакетов питона "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

Releases · astral-sh/uv

UV должен быть "в PATH", что надо проверить, перейдя в случайный каталог и выполнить там команду:

  • uv --version
UV должен ответить номером версии и датой ее выпуска
UV должен ответить номером версии и датой ее выпуска

Обновление версии UV производится командой

  • uv self update
Запрос обновления UV
Запрос обновления UV

Вот так выглядит обновления UV (он обновился пока писал статью)

Обновление UV
Обновление UV

Команда вызова справки UV выведет в терминал справку по командам UV

  • uv --help
Справка по командам UV
Справка по командам UV

Команда вызова справки UVX (eXtended - расширенная "uv-tools") выведет в терминал справку по командам UVX

  • uvx --help
-6

Для удаления UV просто удалите эти два файла из папки:

  • uv.exe
  • uvx.exe
rm %HOMEPATH%\.Local\bin\uv.exe
rm %HOMEPATH%\.Local\bin\uvx.exe
Для удаления UV просто удалите эти два файла
Для удаления UV просто удалите эти два файла
До версии 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
-8

Очистку кэша надо иметь в виду, поскольку UV создает свой собственный "кэш", который располагается по пути:

  • %HOMEPATH%\AppData\Local\uv\cache
-9

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

Это все места, где UV может "намусорить", и их надо знать, чтобы иметь возможность почистить систему от него

Более подробно смотрите тут:

Installation | 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" в этом каталоге
-10
  • 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 приведен на скриншоте ниже:

Структура записей TOML-файла проекта для установки TORCH-CUDA с помощью UV
Структура записей TOML-файла проекта для установки TORCH-CUDA с помощью UV

Можете просто скопировать эти разделы отсюда:

[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. Откроем файл в блокноте (или любом редакторе) и изменим в нем только то, что обведено зеленым, кроме версии питона. Это название проекта, описание и версия, это просто "для информации", не более.

-17

4. У меня получилось так (5 строку я вообще удалил)

Пропишем заголовки
Пропишем заголовки

Все, что ниже обведенного зеленым - НЕ ТРОГАЕМ!!!
Я там прописал самое трудное - установку TORCH-CUDA для карт NVIDIA!!!

5. Скачаем ComfyUI с Git командой:

Должна появиться папка с "ComfyUI"
Должна появиться папка с "ComfyUI"

Следите за логом скачивания, чтобы убедиться, что связь с 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".

Созданное VENV и временные файлы
Созданное VENV и временные файлы

Файлы, отмеченные красным (нулевой длины) можно удалить.

9. Теперь командой:

  • uv add pip
    ... мы установим пакет "pip", которого в составе UV-питона нет (но об этом не знают остальные компоненты ComfyUI, которые будут его искать)
Установили PIP
Установили PIP

10. Теперь откроем файл "pyproject.toml"

В нем мы увидим, что UV сам внес в файл проекта все пакеты, которые проекту нужны. Это аналогия файлу "requirements.txt" в составе "ComfyUI".

-24
Примечание
UV создал нам VENV и все пакеты вписал в TOML-файл. Теперь, если мы удалим VENV вообще, ничего страшного, UV нам его восстановит при первом же к нему обращении.
Вы заметили, что мы не устанавливали сам питон, поскольку, раз у нас в "проекте" записана версия питона, а он у нас не установлен, UV его установит САМ нас даже не спрашивая.
Идеология такова: объекты, которые нужны для работы, могут быть созданы "на лету", автоматически создаются UV.

11. Установка Менеджера ComfyUI

Менеджер встал
Менеджер встал

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 секунд.

Запуск ComfyUI с восстановлением VENV
Запуск ComfyUI с восстановлением VENV

=============================================

Пример 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 ===

=============================================

СТАТЬЯ НЕ ЗАКОНЧЕНА!!!

ВОПРОСЫ И ПОЖЕЛАНИЯ - В КОММЕНТАРИИ!!!

=============================================

Статья будет постоянно дописываться и обновляться... "рефрешьте"

-28