問題の概要:ノード更新後の依存関係エラー
ComfyUIの強力な拡張機能である「ComfyUI Manager」を使用して、カスタムノードを更新した後、以下のようなエラーが発生し、ワークフローの実行に失敗することがあります。
ModuleNotFoundError: No module named 'torchvision'
# または
ImportError: cannot import name 'some_function' from 'some_package'
# あるいは
AttributeError: module 'numpy' has no attribute 'float'
この問題は、更新されたカスタムノードが、現在のComfyUI環境にインストールされているPythonパッケージ(ライブラリ)と互換性のないバージョンを要求した結果、依存関係の競合が発生している状態です。具体的には、異なるノードが同じパッケージの異なるバージョンを必要とし、環境内で一貫性が失われることで起きます。
原因の解説:依存関係の地獄(Dependency Hell)
この問題の根本原因は、Pythonのパッケージ管理システム「pip」と、ComfyUIの分散型開発環境にあります。
1. バージョン指定の不一致
各カスタムノードの開発者は、開発時に使用した特定のパッケージバージョン(例: torch==2.1.0)を前提にコードを書きます。ComfyUI Manager経由でノードを更新すると、そのノードが要求する新しいバージョンが既存の環境と衝突する可能性があります。
2. グローバル環境への直接インストール
多くのカスタムノードのインストールスクリプトは、システム全体またはComfyUIのメインPython環境に直接パッケージをインストール(pip install)します。これにより、あるノードの更新が、別のノードが依存している古いバージョンのパッケージを上書きしてしまうことがあります。
3. ComfyUI Managerの限界
ComfyUI Managerはノードの更新を便利に行えますが、複雑な依存関係の解決や、仮想環境の分離までは管理しません。そのため、更新プロセスは本質的に「上書きインストール」に近く、競合リスクを内包しています。
解決方法:ステップバイステップでの問題解決
以下の手順で、パッケージ競合を解決し、安定した環境を復元します。
ステップ1:エラーの正確な特定
まず、ComfyUIのターミナル(コマンドプロンプト)に表示される完全なエラーメッセージを確認します。どのモジュールで、どのバージョンに関連するエラーなのかを特定します。
# エラーメッセージの例
ERROR: pip's dependency resolver does not currently take into account all installed packages.
This may cause the behavior of the version you have selected to be different from what you expect.
Found existing installation: numpy 1.24.3
Uninstalling numpy-1.24.3:
Successfully uninstalled numpy-1.24.3
ERROR: Cannot uninstall 'numpy' because it is a distutils installed project.
ステップ2:問題のノードを特定する
ComfyUI Managerの「Update All」ではなく、どのノードを更新した直後にエラーが発生したかを思い出します。管理画面で最近更新されたノードを確認します。
ステップ3:最小限の環境での再現とロールバック(推奨)
最も安全な方法は、問題のノードを一旦以前のバージョンに戻すことです。
1. ComfyUIのインストールフォルダ内の custom_nodes/ ディレクトリに移動します。
2. 問題を起こしているノードのフォルダ(例: ComfyUI-Impact-Pack)を見つけます。
3. そのフォルダを別名に変更(例: ComfyUI-Impact-Pack_BAK)するか、削除します。
4. ComfyUI Managerを開き、該当ノードを「インストール」し直します。この時、最新版ではなく、一つ前のコミットを選択できる場合があります。あるいは、ノードのGitHubページから安定版のZIPをダウンロードして手動インストールします。
ステップ4:依存関係の手動調整(上級者向け)
ノードをロールバックせずに解決する場合、環境のパッケージバージョンを調整します。
1. エラーの原因となっているパッケージと、必要なバージョンを特定します(多くの場合、ノードの requirements.txt や install.py ファイルに記載されています)。
2. ComfyUIのPython環境で、互換性のあるバージョンを再インストールします。まず現在のバージョンを確認します。
# ComfyUIのインストールディレクトリで、python_embeded または venv 環境をアクティベート後
# Windows (python_embeded) の場合:
python.exe -m pip list | findstr numpy
# Linux/macOS の場合:
pip list | grep numpy
# 出力例:
# numpy 1.26.0
3. 競合を避けるため、多くのノードで広く互換性のあるバージョンにダウングレードします。例えば、NumPyの古いバージョン指定はよく問題を解決します。
# 例: NumPyを広く使われるバージョンに変更
python.exe -m pip install "numpy<1.24" --force-reinstall
# 例: 特定のバージョンを明示的にインストール
python.exe -m pip install torch==2.1.0 torchvision==0.16.0 --index-url https://download.pytorch.org/whl/cu118
注意: --force-reinstall オプションは強制的に再インストールします。他の依存関係を壊す可能性があるため、注意して使用してください。
ステップ5:仮想環境の活用(根本的解決策)
最もクリーンな解決策は、ComfyUI専用のPython仮想環境(venv)を作成し、そこで全てのパッケージを管理することです。これにより、システムのPython環境や他のプロジェクトとの干渉を防げます。
# 1. 新しい仮想環境を作成(ComfyUIフォルダ外で実行推奨)
python -m venv comfyui_venv
# 2. 仮想環境をアクティベート
# Windows:
comfyui_venvScriptsactivate
# Linux/macOS:
source comfyui_venv/bin/activate
# 3. 仮想環境内にComfyUIの依存関係をインストール
cd path/to/ComfyUI
pip install -r requirements.txt
# 4. この仮想環境でComfyUIを起動
python main.py
この環境でカスタムノードをインストール・更新すると、問題が起きても仮想環境自体を削除して一から作り直すことが容易です。
コード例・コマンド例:よくある競合とその解決コマンド
以下は、実際のトラブルシューティングで頻出するパッケージ競合と、それを解決するための具体的なpipコマンド例です。
# ケース1: torchとtorchvisionのバージョン不一致エラー
# 解決策: CUDA 11.8用の互換性のあるバージョン群をインストール
python.exe -m pip install torch==2.1.1 torchvision==0.16.1 torchaudio==2.1.1 --index-url https://download.pytorch.org/whl/cu118
# ケース2: `numpy.float` などの非推奨属性エラー (numpy 1.24以降)
# 解決策: 多くのカスタムノードと互換性のある古いバージョンにダウングレード
python.exe -m pip install "numpy==1.23.5" --force-reinstall
# ケース3: パッケージのアンインストールに失敗する場合
# 解決策: `--ignore-installed` オプションで強制インストール
python.exe -m pip install some-package --ignore-installed
# ケース4: 環境全体の依存関係を確認
# 現在インストールされている主要パッケージのバージョンを一覧表示
python.exe -m pip list
まとめ・補足情報
ComfyUI Managerによるノード更新時のパッケージ競合は、活発な開発が行われるエコシステムでは避けられない問題の一つです。この問題に対処するための基本方針は以下の通りです。
- 予防: ノードを一度に大量更新(Update All)するのではなく、必要に応じて個別に更新し、その都度動作確認を行います。
- 復旧: 問題が発生したら、まずは該当ノードをロールバック(以前のバージョンに戻す)することが最も確実で安全な解決策です。
- 分離: 長期的には、ComfyUI専用のPython仮想環境(venv)やDockerコンテナを使用して環境を分離することが、最も保守性の高い方法です。
- 記録: 安定して動作する環境のパッケージリスト(
pip freeze > stable_requirements.txt)を保存しておくと、環境を再構築する際に大変役立ちます。
ComfyUIのコミュニティは非常に活発で、ノードの更新頻度も高いため、このような依存関係の問題に遭遇することは珍しくありません。エラーメッセージを冷静に読み解き、段階的に対処するスキルを身につけることが、Stable Diffusionワークフローを安定して運用するための鍵となります。