(解決済み)PyQt5 Tools の uic.exe を起動できない

メンテナンス注記(2026 年 9 月): タイトルの「解決済み」は 2019 年の 1 台の PC で得られた結果であり、万能な修復方法ではありません。元の記事では、実行ファイルを pyqt5_tools の内部パスへハードリンクしていました。この方法は環境の不一致を隠し、更新後に再び壊れる可能性があります。以下の保守版では読み取り専用の診断から始め、アクティブな環境自身のツールを使い、記事末尾に完全な原文を保存します。リポジトリ整形のため、不可視の行末空白だけを正規化しています。

エラーは実行ファイル名を示していますが、どの層で失敗したかまでは示しません。Qt Designer の通常の uic ワークフローは .ui ファイルから C++ を生成し、PyQt5 の pyuic5 は Python を生成します。さらに、サードパーティーの pyqt5-tools は独自の Designer ランチャーと互換ブリッジを追加します。ファイルを変更する前に、これらを別々のツールとして診断してください。

2019 年の回避策で分かったこと、分からなかったこと

当時の PC には次の 2 ファイルがありました。

C:Miniconda3Libsite-packagespyqt5_toolsuic.exe
C:Miniconda3Scriptspyuic5.exe

一方、Designer が探していたのは次のパスでした。

C:Miniconda3Libsite-packagespyqt5_toolsbinuic.exe

ハードリンクによってこの検索は成功しました。分かるのは、そのインストールでは Designer がリンク先のファイルを実行できたということだけです。別の pyqt5-tools、PyQt5、Qt、Python、Conda、Windows のバージョンでも同じ配置が正しいとは証明できません

アーカイブには Windows ではハードリンクを作成できないとも書かれていますが、これは誤りです。Microsoft は NTFS の fsutil hardlink create を公式に文書化しています。それでも、ハードリンクはここで最初に選ぶ修復方法には向きません。パッケージ内部パスへの仮定を複製し、パッケージのメタデータで管理されず、いずれかのパッケージを置き換えると古くなる可能性があるからです。以下の診断と推奨ワークフローにサードパーティーのシェル拡張は不要です。

Qt Designer の uic パス回避策を示す当時のスクリーンショット

まず、本当に必要な結果を選ぶ

目的適切なツール境界推奨ルート
form.ui から Python を生成するPyQt5 の pyuic5 または PyQt5.uic現在のプロジェクト用 Python 環境で変換する。Designer の View Code メニューは必須ではない。
Qt/C++ コードをプレビューまたは生成するQt Designer と Qt の uic対応する Qt ツールセットを使う。Qt のコンパイラーを無関係な PyQt ランチャーで置き換えない。
pyqt5-tools 同梱の Designer を起動するサードパーティーの pyqt5-tools ラッパーパッケージを所有する同じ環境からラッパーを実行し、そのバージョンのヘルプを確認する。
実行時に .ui ファイルを読み込むPyQt5 の uic.loadUi() または生成済みモジュールプロジェクト全体で 1 つの方式を選び、配布時の PyQt5 バージョンでテストする。

Riverbank は pyuic5 を PyQt5 の uic モジュールに対するコマンドラインインターフェースとして説明しています。Qt は Designer の .ui ファイルを XML と説明し、通常の uic 出力を C++ コードとしています。この違いを理解すると、Designer の View Code が失敗しても、PyQt5 の import や Python コード生成まで壊れているとは限らないことが分かります。

1. 変更せずにアクティブ環境を記録する

プロジェクトで実際に使う Conda プロンプトまたは PowerShell セッションを開きます。PROJECT_ENV は目的の環境名に置き換え、base が正しいと決めつけないでください。

conda info --envs
conda activate PROJECT_ENV

Get-Command python -All
Get-Command pyuic5 -All -ErrorAction SilentlyContinue
Get-Command pyqt5-tools -All -ErrorAction SilentlyContinue

python -c "import sys; print(sys.executable); print(sys.version)"
python -m pip --version
python -m pip show --files PyQt5 pyqt5-tools
python -m pip check
conda list | Select-String -Pattern '^(pyqt|qt|python|pip)s'

出力全体を保存してください。sys.executable は実際に動いているインタープリターを示します。Get-Command -All は別環境の同名コマンドを可視化し、pip show --files はパッケージ所有ファイルを表示し、pip check は不足または不整合な Python 依存関係を報告します。これらのコマンドは再インストールも削除も行いません。

2. 正確な失敗を分類する

症状想定される分類意味
Designer が Unable to launch ...pyqt5_toolsbinuic.exe と表示するDesigner 補助プログラムのパス/配置Designer がパッケージ固有のパスに存在しない補助プログラムを期待している。これだけでは pyuic5 の状態は分からない。
pyuic5.exeFatal error in launcher または古い Python パスを表示する古いエントリーポイントランチャー/インタープリターPython のインストーラーは環境の Scripts ディレクトリに Windows 用コマンドラッパーを作る。環境をコピーまたは移動すると、ラッパーが古いインタープリターを指し続けることがある。Unix では shebang 問題と呼ばれることが多いが、Windows の .exe をバイナリエディターで直してはいけない。
pyuic5 が認識されないアクティベーション/PATH目的の環境が非アクティブ、その ScriptsPATH にない、またはエントリーポイントが未インストール。
ModuleNotFoundError: PyQt5間違ったインタープリターまたは配布パッケージ不足sys.executableGet-Command pythonpython -m pip show PyQt5 を比較する。
DLL load failed、プラグイン読み込みエラー、依存関係の不整合バイナリ/バージョン/ツールセットの不一致パッケージを変える前に Python のアーキテクチャと PyQt5、Qt、プラグイン、ツールの正確なバージョンを確認する。
変換は走るが生成コードが失敗する.ui/リソース/API の互換性最小の .ui と同じ PyQt5 バージョンで再現する。ランチャーパスの修復ではない。

エラー文そのものが重要です。コンソールの全文と、エラーを出した正確なメニューまたはコマンドを保存してください。最後の 1 行だけのスクリーンショットでは、インタープリターとパスの証拠が失われます。

3. 環境が所有するパスを調べる

目的の環境をアクティベートした後、C:Miniconda3 を固定せず、PowerShell に環境ルートを導出させます。

$pythonPath = (Get-Command python).Source
$environmentRoot = Split-Path $pythonPath
$scriptsPath = Join-Path $environmentRoot 'Scripts'
$historicalHelper = Join-Path $environmentRoot 'Libsite-packagespyqt5_toolsbinuic.exe'

$pythonPath
$environmentRoot
Test-Path -LiteralPath $scriptsPath -PathType Container
Test-Path -LiteralPath (Join-Path $scriptsPath 'pyuic5.exe') -PathType Leaf
Test-Path -LiteralPath (Join-Path $scriptsPath 'pyqt5-tools.exe') -PathType Leaf
Test-Path -LiteralPath $historicalHelper -PathType Leaf

Get-ChildItem -LiteralPath $environmentRoot -Filter uic.exe -Recurse -ErrorAction SilentlyContinue

結果を python -m pip show --files と照合します。環境内のどこかにファイルが存在するだけでは、Designer がそれを使うべきだという証拠になりません。同様に、.exe を手動でコピーしても所有関係は登録されず、そのインタープリターや Qt 依存関係も一致しません。

4. Designer の View Code に依存せず Python を生成する

本当の目的が Python 出力なら、まず環境内にある PyQt5 の公式コマンドを試し、既存の生成モジュールを上書きしないよう新しいファイルへ書き出します。

pyuic5 .form.ui -o .ui_form_generated.py
python -m py_compile .ui_form_generated.py

バージョン管理中の生成ファイルを置き換える前に差分を確認してください。Riverbank は生成コードが生成時の PyQt5 バージョンに依存すると注意しているため、アプリを配布するバージョンで再生成し、テストします。

PyQt5 の import は成功し、pyuic5.exe ランチャーだけが古い場合は、次の小さなスクリプトで公式 PyQt5.uic.compileUi() API を直接実行できます。生成ソースをメモリー上で検証し、新しい出力ファイルだけをアトミックに置き換えます。

from io import StringIO
import os
from pathlib import Path
from tempfile import NamedTemporaryFile

from PyQt5 import uic

source = Path("form.ui")
target = Path("ui_form_generated.py")

buffer = StringIO()
uic.compileUi(str(source), buffer, from_imports=True)
generated = buffer.getvalue()
compile(generated, str(target), "exec")

temporary_path = None
try:
    with NamedTemporaryFile(
        "w",
        encoding="utf-8",
        newline="n",
        dir=target.parent,
        prefix=target.name + ".",
        suffix=".tmp",
        delete=False,
    ) as temporary:
        temporary.write(generated)
        temporary_path = Path(temporary.name)

    os.replace(temporary_path, target)
    temporary_path = None
finally:
    if temporary_path is not None:
        try:
            temporary_path.unlink()
        except FileNotFoundError:
            pass

先ほど sys.executable で確認したインタープリターから実行し、続けて python -m py_compile .ui_form_generated.py を実行します。壊れたコンソールランチャーは迂回できますが、Designer の内部補助パスは修復しません。

5. 全パッケージではなく、失敗した層を修復する

A. 古いランチャーまたは混在した環境

まずロールバック用の記録を取ります。

conda list --explicit > .conda-explicit-before.txt
python -m pip freeze > .pip-before.txt

プロジェクトに記録済みの要件またはロックファイルから、別名の並行環境を作る方法を優先してください。IDE のインタープリターを変更したり古い環境を削除したりする前に、その環境を検証します。現在の Conda ガイドは分離を推奨し、pip 使用後に変更が必要なら環境を作り直すよう勧めています。

仮想/Conda 環境のディレクトリを移動する、pyuic5.exe だけをコピーする、ランチャーバイナリを編集する、すべての Python Scripts をグローバル PATH に追加する、といった操作は避けてください。コマンド解決の再現性が下がります。

B. pyqt5-tools の Designer ブリッジがない

pyqt5-tools はサードパーティーの補助プロジェクトであり、Riverbank の PyQt5 wheel の一部ではありません。現在の PyPI ページでは Beta とされ、最新リリースは 2023 年 3 月、Python 3.7 以上を要件とし、Python の classifier は 3.9 までしか記載されていません。このメタデータは互換性の手掛かりであって、特定の Python/Qt 組み合わせが動く保証ではありません。

同プロジェクトは現在、Designer でコードを表示するためのバージョン固有の installuic サブコマンドを説明しています。しかし同じページは意外にも pyuic6.exe のコピーに言及し、Designer の一方のメニュールートは壊れたままだとしています。この不整合を考慮し、破棄可能または容易に再作成できる並行環境だけで試してください。

& "$env:CONDA_PREFIXScriptspyqt5-tools.exe" --help
& "$env:CONDA_PREFIXScriptspyqt5-tools.exe" installuic --help

インストール済みバージョンのヘルプとパッケージ文書が環境に合う場合だけ、サブコマンド本体を実行します。

& "$env:CONDA_PREFIXScriptspyqt5-tools.exe" installuic

その後、パス一覧と変換テストを再実行します。目的が .ui から Python を作るだけなら、このブリッジを使わないでください。pyuic5 または PyQt5.uic が、サポートされた PyQt5 の境界をすでに提供しています。

C. バージョンまたはバイナリの不一致

バージョン未固定の「全部再インストール」から始めないでください。失敗中の環境を保存し、リゾルバーのエラーを読み、互換性のある Python/PyQt5/tools の組み合わせを新しい環境で試します。パッケージの可用性は Python バージョン、アーキテクチャ、プラットフォームに依存します。インストール成功は最初の関門にすぎず、pip check、import、変換、コンパイル、Designer 起動のすべてが通る必要があります。

D. 本当の目的が Qt/C++ の View Code である

Designer と同じ Qt 配布物の uic を使います。Qt の公式ワークフローは XML の .ui ファイルから C++ ヘッダーを生成します。選んだサードパーティーブリッジが、その正確なバージョンについて明示的に説明していない限り、PyQt 固有の補助プログラムは適切な代替ではありません。

6. 検証、受け入れ、ロールバック

実際の .ui ファイルの小さなコピーを使い、次の表を記録します。

確認項目合格条件
インタープリターsys.executable が目的の環境内を指す。
依存関係python -m pip check が壊れた要件を報告しない。
PyQt5 の importpython -c "from PyQt5 import uic; print(uic.__file__)" がその環境内を指す。
変換pyuic5 または API スクリプトが .ui ソースを変えず、新しい Python ファイルを作る。
構文python -m py_compile .ui_form_generated.py が成功する。
アプリケーション生成フォームをプロジェクト自身のスモークテストで import して開ける。
Designer(必要な場合)同じ環境のラッパーで Designer が起動し、View Code が期待する言語を生成する。

新しいシェルから必要な全項目が 2 回連続で通った場合だけ修復を受け入れます。並行環境が失敗したら非アクティブにし、IDE を未変更の旧インタープリターへ戻します。保存した一覧は証拠として残ります。プロジェクトのテストスイートと通常の開発セッションが 1 回通るまで旧環境を保持してください。

避けるべき壊れやすい修復

  • 文書化されていない site-packages のサブディレクトリへ uic.exe をハードリンクまたはコピーする。
  • ある環境から別の環境へ pyuic5.exe をコピーする。
  • 生成された Windows ランチャーを編集する、またはすべてのランチャー障害をテキスト shebang 問題だと決めつける。
  • Conda の base へインストールする、Conda 内で pip --user を使う、複数環境をグローバル PATH で混在させる。
  • バージョンと元のエラーを保存する前に PyQt5、Qt、Designer、プラグインをまとめて再インストールする。
  • Designer の View Code.ui から Python を生成する唯一の方法だと考える。

一次資料

2019 年の原文(完全アーカイブ)

アーカイブの来歴: 以下の本文は out/posts/2019-05-01-unable-to-launch-cminiconda3libsite-packagespyqt5_toolsbinuic-exe-1925/index.md、投稿 ID 1925、日付 2019-05-01 から転記しています。完全な可視テキスト、綴り、大文字小文字、相対画像パス、誤ったハードリンクの主張を保存し、リポジトリ整形のため不可視の行末空白だけを正規化しています。現在の手順として実行しないでください。


When I use Qt Designer, I want to view the corresponding python or c code(Form > View Code). However, the installed qt-designer cannot find uic module. I found the uic moudle(uic.exe) located in

C:Miniconda3Libsite-packagespyqt5_toolsuic.exe


and the pyuic5 executable (pyuic5.exe) located at

C:Miniconda3Scriptspyuic5.exe


In windows, we cannot create hard link, so I installed Hard Link Shell. Then I hard-linked those excutables to the path qt-designer used. Finally, it works like a charm.

![](images/image-1024x116.png)

Leave a Reply