PyInstallerでMoviePyアプリをEXE化する際の問題と解決方法
MoviePyを使用したPythonアプリケーションをPyInstallerでEXE化する際に遭遇した問題と、その解決方法を詳しく解説します。
Python
MoviePy
PyInstaller
Windows
環境
- Python: Anaconda3環境
- OS: Windows
- MoviePy: 2.2.1 → 1.0.3(ダウングレード)
- NumPy: 2.3.5 → 1.26.4(ダウングレード)
- PyInstaller: 最新版
発生した問題と解決方法
問題1: ModuleNotFoundError: No module named ‘moviepy.editor’
症状:
Traceback (most recent call last):
File “oricon_video.py”, line 4, in <module>
import moviepy.editor as mpy
ModuleNotFoundError: No module named ‘moviepy.editor’
原因:
- MoviePy 2.x系では内部構造が大幅に変更された
- moviepy.editorモジュールが削除され、editor.pyファイル自体が存在しない
- MoviePy 1.x系のコードとの互換性がない
確認方法:
# MoviePyフォルダの中身を確認
dir C:\Users\[ユーザー名]\anaconda3\Lib\site-packages\moviepy
# editor.pyが存在するか確認
Test-Path C:\Users\[ユーザー名]\anaconda3\Lib\site-packages\moviepy\editor.py
解決方法:
# MoviePy 1.0.3にダウングレード
pip uninstall -y moviepy
pip install moviepy==1.0.3
# 確認
python -c “from moviepy.editor import VideoClip; print(‘OK’)”
問題2: ImportError: initialization failed(NumPy互換性問題)
症状:
ImportError: numpy.core.multiarray failed to import
ImportError: initialization failed
原因:
- NumPy 2.x系(2.3.5等)を使用していた
- 多くのライブラリ(astropy、erfa等)がNumPy 1.x用にコンパイルされている
- バイナリ互換性がなく、初期化に失敗する
解決方法:
# NumPy 1.x系にダウングレード
pip install “numpy<2”
# バージョン確認(1.26.4などが表示されればOK)
python -c “import numpy; print(numpy.__version__)”
問題3: PackageNotFoundError: No package metadata was found for imageio
症状:
importlib.metadata.PackageNotFoundError:
No package metadata was found for imageio
原因:
- PyInstallerがパッケージのメタデータ(バージョン情報等)を含めていない
- imageioやmoviepyが実行時にimportlib.metadataでバージョン確認を行おうとして失敗
解決方法:
# メタデータを明示的に含めてビルド
pyinstaller –onedir –console `
–copy-metadata imageio `
–copy-metadata imageio-ffmpeg `
–copy-metadata moviepy `
–name “YourAppName” `
your_script.py
問題4: ダブルクリックで起動しない(作業ディレクトリ問題)
症状:
- PowerShellから.\YourApp.exeで起動すると正常に動作
- ダブルクリックすると起動しない、またはファイルが見つからないエラー
原因:
- ダブルクリックで起動すると、作業ディレクトリがEXEの場所ではなく別の場所になる
- 相対パスで画像やファイルを読み込んでいる場合、パスが通らない
解決方法:
Pythonスクリプトの冒頭(import文の直後)に以下を追加:
import os
import sys
# PyInstallerでパッケージされている場合、実行ファイルのディレクトリに移動
if getattr(sys, ‘frozen’, False):
application_path = os.path.dirname(sys.executable)
os.chdir(application_path)
最終的なビルドコマンド
すべての問題を解決した最終的なビルドコマンド:
# 古いビルドを削除
Remove-Item -Recurse -Force build, dist -ErrorAction SilentlyContinue
# ビルド実行
pyinstaller –onedir –console `
–copy-metadata imageio `
–copy-metadata imageio-ffmpeg `
–copy-metadata moviepy `
–name “YourAppName” `
your_script.py
トラブルシューティング Tips
PyInstallerがMoviePyを検出できない場合
import文を明示的に記述する:
# ❌ ワイルドカードインポート(PyInstallerが検出できない)
from moviepy.editor import *
# ✅ 明示的なインポート(推奨)
import moviepy.editor as mpy
from moviepy.editor import VideoClip, TextClip, CompositeVideoClip, concatenate_videoclips
Anaconda環境での注意点
Anaconda環境では、PyInstallerが正しくパッケージを検出できないことがあります。その場合:
# パスを明示的に指定
pyinstaller –onedir –console `
–paths=”C:\Users\[ユーザー名]\anaconda3\Lib\site-packages” `
–copy-metadata imageio `
–copy-metadata moviepy `
–name “YourAppName” `
your_script.py
バッチファイルで起動テスト
EXE化後の動作確認には、batファイルを使うと便利:
@echo off
cd /d “%~dp0”
YourAppName.exe
pause
エラーメッセージが表示されるので、問題の特定が容易になります。
まとめ
MoviePyアプリをPyInstallerでEXE化する際の主な問題:
- MoviePy 2.x系の構造変更 → MoviePy 1.0.3にダウングレード
- NumPy 2.x系の互換性問題 → NumPy 1.26.4にダウングレード
- メタデータの欠落 → –copy-metadata オプションを使用
- 作業ディレクトリの問題 → os.chdir()で修正
これらの対処により、安定して動作するEXEファイルを生成できます。
検証手順
-
Python環境での動作確認
python your_script.py
-
依存関係の確認
pip list | Select-String “moviepy|numpy|imageio”
-
EXE化
pyinstaller –onedir –console ` –copy-metadata imageio ` –copy-metadata moviepy ` –name “YourAppName” ` your_script.py
-
動作テスト
cd dist\YourAppName .\YourAppName.exe
この順序で確実に動作するEXEファイルを作成できます。
