PyinstallerのDLL読み込み失敗エラーを解決する方法

はじめに

Pythonで書いたコードをexe化しようと思い、Pyinstallerを使用すると、エラーが発生してしまいました。解決に時間がかかったので、記録を残しておきます。

問題

PythonのコードにはQRコードの検出のために、pyzbarを使用していました。

from pyzbar.pyzbar import decode
def main(): # 省略

コードを書いたmain.pyがあるディレクトリまで移動して、以下のPyinstallerのコマンドを実行。

$ pyinstaller main.py --onedir --clean

すると、.dllが見つからないという以下のエラーが発生しました。

解決方法

上記のPyinstallerのコマンドを実行すると、.specファイルが自動生成されると思います。そのファイルを編集します。

.specファイルをエディタで開き、エラーに記載されているdllを追加。

a = Analysis(
 ~省略~ binaries=[(r'..\myvenv\Lib\site-packages\pyzbar\libiconv.dll', '.'),(r'..\myvenv\Lib\site-packages\pyzbar\libzbar-64.dll', '.')],
)

変更後にターミナルで以下を実行します。

$ pyinstaller main.spec

再度、Pyinstallerのコマンドを実行すると、無事にexeファイルを作成することができました。

$ pyinstaller main.py --onedir --clean

おわりに

Pyinstallerで初めてエラーに遭遇し、調べてもなかなか解決できなくて、時間を少しロスしました。

参考

解決のために以下の記事を参考にしました。