-
Notifications
You must be signed in to change notification settings - Fork 75
PyInstaller環境構築
MMVC_ClientもPythonで書かれているため、Windowsでクライアントを動かすためにはPythonの環境を準備する必要があります。
ユーザもローカルにPythonの環境を準備するのは手間だと思われるので、PyInstallerを使ってexe化してクライアントを配布しています。
ここではそのPyInstallerでexe化するための構築手順が説明されています。
- Windows11上で実行
- CUDAのドライバが導入済み
- PythonはWindows標準(3.9)が導入済み
- PowerShell上で設定
- クライアントのソースを配置
- pipenvをインストール
- PyInstaller用のpipenv環境の構築
- PyInstallerでexe生成
適当なフォルダ上で
git clone https://github.com/isletennos/MMVC_Client.git -b main --depth 1
などでクライアントのソースをcloneします。
gitが入っていない場合などは「main」ブランチのzipファイルをダウンロードして展開してください。
以降、クライアントのソースが「MMVC_Client」フォルダ内に入っていることとします。
普段pipenvを使われていない場合、pipenvのインストールと環境変数の設定が必要です。
pipenvのインストールで「Path」と「PIPENV_VENV_IN_PROJECT」の設定が必要で、つまづくことが多いのでバッチファイルを用意してあります。
pipenvのインストールは一度だけ行えばよいです。
cd MMVC_Client\python
.\install_pipenv.ps1
install_pipenv.ps1 でやっている内容
pip install --upgrade pip
pip install pipenv
$pythonUserPath = python -m site --user-site
$pythonUserPath = $pythonUserPath.Replace('site-packages', 'Scripts')
$ENV:Path += ";" + $pythonUserPath
$userPath = [System.Environment]::GetEnvironmentVariable("Path", "User")
$userPath += ";" + $pythonUserPath
[System.Environment]::SetEnvironmentVariable("Path", $userPath, "User")
$ENV:PIPENV_VENV_IN_PROJECT = '.venv'
[System.Environment]::SetEnvironmentVariable("PIPENV_VENV_IN_PROJECT", ".venv", "User")
- pipenvのインストール
- 環境変数Pathにpipenvがインストールされたディレクトリの追加
- 環境変数PIPENV_VENV_IN_PROJECTに「.venv」を設定
「MMVC_Client\python」フォルダ内にてpipenv環境の構築を行います。
cd MMVC_Client\python
pipenv install
PyAudioは素直に入らないのでローカルにファイルをダウンロードして手で入れます。
Archived: Python Extension Packages for Windows - Christoph Gohlke
から、Pythonのバージョン(3.9)に合わせて「PyAudio‑0.2.11‑cp39‑cp39‑win_amd64.whl」をダウンロードします。
pipenv run pip install .\PyAudio-0.2.11-cp39-cp39-win_amd64.whl
下記バッチファイルからPyInstallerを起動してexeを生成します。
.\makeexe.ps1
「dist」フォルダに「mmvc_client」フォルダと「output_audio_device_list.exe」が生成されます。
これをフォルダごと実行したい環境にコピーして「mmvc_client\mmvc_client.exe」を実行してください。
makeexe.ps1 でやっている内容
pipenv run pyinstaller mmvc_client.py --add-binary "./.venv/Lib/site-packages/onnxruntime/capi/onnxruntime_providers_shared.dll;./onnxruntime/capi/" --add-binary "./.venv/Lib/site-packages/onnxruntime/capi/DirectML.dll;./onnxruntime/capi/" --collect-data librosa --onedir --clean -y
pipenv run pyinstaller output_audio_device_list.py --onefile
- onefile だと起動が遅いため onedir での生成を指定
- onnxruntimeで必要なdllを明示的にコピーするように指定
- librosaでサンプルデータがないというエラーに対応する
noisereduce(というかlibrosa)で問題があり、pipenv環境でないと上手く構築できなかったため、pipenv環境の構築が必要
librosaのregistry.txtが存在しないというエラーは下記エントリを参考に「--collect-data librosa」を付けることで解決
mac10.15,pyinstaller ,how to deal ...registry.txt · Issue 1289 · librosa/librosa https://github.com/librosa/librosa/issues/1289
「--collect-data librosa」付けなかった場合には、import noisereduce で下記エラーが発生する pipenvで作った場合、エラーメッセージよりlibrosaのregistry.txtが読み込めないのが問題であるのがわかった
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\ksato\\AppData\\Local\\Temp\\_MEI133602\\librosa\\util\\example_data\\registry.txt'