【ComfyUI】Manager経由のノード更新で発生するPythonパッケージ競合の解決法

問題の概要:ノード更新後の依存関係エラー

ComfyUI Managerを使用してカスタムノードを更新した後、以下のようなエラーが発生し、ワークフローの実行やComfyUI自体の起動に失敗することがあります。

ImportError: cannot import name 'some_function' from 'some_module'
# または
ModuleNotFoundError: No module named 'updated_package_name'
# またはバージョン関連のエラー
pkg_resources.VersionConflict: (package-a 1.2.0 (/path/to/site-packages), Requirement.parse('package-a>=2.0.0'))

この問題は、更新されたカスタムノードが新しいバージョンのPythonパッケージを要求する一方で、ComfyUI本体や他のノードが古いバージョンに依存している場合に発生します。特に、torch, numpy, pillow, opencv-pythonなどの共通ライブラリや、画像処理系のパッケージで競合が起きやすい傾向があります。

原因の解説:依存関係の不一致と環境汚染

この問題の根本的な原因は、以下の2点に集約されます。

1. パッケージバージョンの非互換性

ComfyUIは単一のPython仮想環境(多くの場合はComfyUI_windows_portableフォルダ内のpython_embeded)で動作します。カスタムノードの開発者は、最新バージョンのライブラリを使用して開発を行うことがあります。しかし、ComfyUIのコア機能や他のノードは、安定性を重視して特定の古いバージョンに依存している場合があります。Manager経由でノードを更新すると、この依存関係の不一致が表面化し、インポートエラーや実行時エラーを引き起こします。

2. グローバルなサイトパッケージへの影響

ComfyUIの環境は通常、比較的隔離されていますが、カスタムノードのインストールスクリプト(install.py)がpip installを実行する際、環境全体のパッケージをアップグレードしてしまうことがあります。これにより、あるノードのためにアップグレードされたパッケージが、別のノードで互換性の問題を発生させるという「環境汚染」が起きます。

# 問題を引き起こす可能性のあるノードのinstall.pyの例
import subprocess
import sys
subprocess.check_call([sys.executable, "-m", "pip", "install", "some-package==2.0.0"]) # 特定バージョンを強制
# または、より危険な例
subprocess.check_call([sys.executable, "-m", "pip", "install", "--upgrade", "some-package"]) # 無条件アップグレード

解決方法:ステップバイステップでの対処法

問題が発生した場合、以下の手順で調査と解決を行ってください。

ステップ1: エラーの正確な把握とログ確認

まず、ComfyUIのターミナル(コマンドプロンプト)に表示される完全なエラーメッセージを確認します。エラーの発生しているモジュール名と、要求されているバージョン、現在インストールされているバージョンを特定します。

# エラーログの例
ERROR:    Traceback (most recent call last):
...
VersionConflict: (torch 2.0.1+cu118 (...), Requirement.parse('torch>=2.1.0'))

ステップ2: 競合パッケージの現在の状態を確認

ComfyUIのPython環境で、問題のパッケージの現在のバージョンを確認します。

# ComfyUIのディレクトリでコマンドプロンプトを開き、以下のコマンドを実行
python -m pip show torch numpy opencv-python
# または、依存関係をツリー状に表示(pip install pipdeptree が必要な場合あり)
python -m pipdeptree | findstr torch

ステップ3: 問題のノードを特定し、一時的に無効化

ComfyUI Managerの「インストール済み」リストや、ComfyUI/custom_nodes/フォルダの更新日時から、直近で更新したノードを特定します。そのノードのフォルダ名の末尾に.disabledなどを追加して無効化し、ComfyUIを再起動して問題が解消するか確認します。これで問題ノードを特定できます。

# 例: custom_nodes/comfyui-node-example を無効化する
# フォルダ名を comfyui-node-example.disabled にリネーム

ステップ4: 依存関係の手動調整(推奨方法)

問題ノードが特定できたら、そのノードが要求するパッケージバージョンを、現在の環境と互換性のあるバージョンに調整します。最も安全な方法は、そのノードのrequirements.txtinstall.py を編集することです。

1. ノードフォルダ内の `requirements.txt` を開く。
2. 競合しているパッケージの行を見つける (例: `torch>=2.1.0`)。
3. ComfyUI環境で動作が確認されているバージョンに変更する (例: `torch==2.0.1`)。
4. 変更を保存し、ターミナルで該当ノードフォルダに移動して手動インストール。
   cd ComfyUIcustom_nodesproblem_node
   ....python_embededpython.exe -m pip install -r requirements.txt

install.pyしかない場合は、スクリプト内のpip installコマンドを編集し、バージョンを指定します。

ステップ5: 仮想環境の復旧(最終手段)

パッケージの競合が複雑で解決が困難な場合、ComfyUIのPython環境を初期状態に戻すことが確実な解決策です。ポータブル版を使用している場合は、以下のフォルダを削除またはリネームしてからComfyUIを再起動します。再起動時に必要なコアパッケージが自動的に再インストールされます。

# 削除またはリネームするフォルダ
ComfyUI_windows_portablepython_embededLibsite-packages
ComfyUI_windows_portablepython_embededLibsite-packages.venv
# 注意: この操作により全てのカスタムノードのPython依存関係も消えるため、
# 必要なノードはManagerからまたは手動で再インストールする必要があります。

コード例・コマンド例:具体的な操作

実際の操作例を、Windowsのポータブル環境を想定して示します。

# 1. エラー発生後、ComfyUIを終了し、コマンドプロンプトを管理者権限で開く。
# 2. ComfyUIのディレクトリに移動。
cd C:ComfyUI_windows_portable

# 3. torchのバージョン競合が起きていると仮定して、現在のバージョンを確認。
python_embededpython.exe -m pip show torch
# 出力例: Version: 2.0.1

# 4. 問題のノード(例: WAS Node Suite)のrequirements.txtを編集。
# ファイルパス: custom_nodesWAS_Node_Suiterequirements.txt
# 編集前: torch>=2.1.0
# 編集後: torch==2.0.1  # 環境にあるバージョンに固定

# 5. 該当ノードの依存関係を再インストール。
cd custom_nodesWAS_Node_Suite
....python_embededpython.exe -m pip install --force-reinstall -r requirements.txt

# 6. ComfyUIを再起動し、エラーが解消したか確認。

まとめ・補足情報

ComfyUI Managerはカスタムノードの管理を非常に便利にしてくれますが、背後で行われるパッケージの更新は環境全体に影響を与える可能性があります。この問題を未然に防ぐためのベストプラクティスは以下の通りです。

  • 更新前のバックアップ: 重要なワークフローを使用する前に、ComfyUI_windows_portableフォルダ全体のバックアップを取る習慣をつけましょう。
  • ノードの更新は慎重に: 特に多くの依存関係を持つ大型のノードスイートを更新する際は、一つずつ更新し、その都度ComfyUIが正常に起動・動作するか確認しましょう。
  • コミュニティ情報の確認: 更新を行う前に、そのカスタムノードのGitHubのIssuesやDiscordチャンネルで、既知の互換性問題がないか確認することをお勧めします。
  • 環境分離の検討(上級者向け): どうしても解決しない複雑な競合がある場合は、Dockerやcondaを使ってComfyUI専用の完全に独立した環境を構築する方法もあります。ただし、セットアップの難易度は高まります。

パッケージ競合はオープンソースのエコシステムではある程度避けられない問題ですが、原因を理解し、系統立てて対処することで、ほとんどの場合は安定した環境を回復させることができます。本記事の手順を参考に、快適なComfyUIライフをお楽しみください。

この記事は役に立ちましたか?