Skip to content

PyInstaller環境構築

SATOH Kiyoshi edited this page Jan 14, 2023 · 9 revisions

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のインストールと環境変数の設定が必要です。
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」を設定

PyInstaller用のpipenv環境の構築

「MMVC_Client\python」フォルダ内にてpipenv環境の構築を行います。

cd MMVC_Client\python
pipenv install

PyAudioのインストール

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生成

下記バッチファイルから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'