質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

3113閲覧

vlcとPyQt5を用いたプログラムのPyInstallerによるexe化がうまくいきません。

Goo_MD

総合スコア11

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2017/12/10 14:27

編集2017/12/10 15:06

###前提・実現したいこと
Python初学者です。
練習としてPyQt5とvlcを用いたMP3プレーヤを作っています。
せっかくなのでexe化してみようと思いPyInstallerを使ってみたのですが、うまくいきません。
ビルド時のコンソールでの命令文は以下の通りです。

Python

1pyinstaller testGui.py -p "C:\Users\ma8wi\Anaconda3\envs\py35\Lib\site-packages\PyQt5\Qt\bin" -p "C:\Program Files\VideoLAN\VLC"

インポートしているモジュールは以下の通りです。

Python

1import sys 2import os 3import vlc 4import keyboard 5from PyQt5 import QtCore 6from PyQt5 import QtWidgets 7from dateutil.relativedelta import relativedelta 8import pyperclip as clip

生成されたexeファイルを実行した結果のエラーメッセージは以下の通りです。

python

1Traceback (most recent call last): 2 File "site-packages\PyInstaller\loader\pyiboot01_bootstrap.py", line 149, in __init__ 3 File "ctypes\__init__.py", line 351, in __init__ 4OSError: [WinError 126] 指定されたモジュールが見つかりません。 5 6During handling of the above exception, another exception occurred: 7 8Traceback (most recent call last): 9 File "testGui.py", line 11, in <module> 10 File "<frozen importlib._bootstrap>", line 968, in _find_and_load 11 File "<frozen importlib._bootstrap>", line 957, in _find_and_load_unlocked 12 File "<frozen importlib._bootstrap>", line 673, in _load_unlocked 13 File "c:\users\ma8wi\anaconda3\envs\py35\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 631, in exec_module 14 exec(bytecode, module.__dict__) 15 File "site-packages\vlc.py", line 198, in <module> 16 File "site-packages\vlc.py", line 169, in find_lib 17 File "site-packages\PyInstaller\loader\pyiboot01_bootstrap.py", line 151, in __init__ 18__main__.PyInstallerImportError: Failed to load dynlib/dll 'libvlc.dll'. Most probably this dynlib/dll was not found when the application was frozen. 19[3156] Failed to execute script testGui

ビルド時のwarningは以下の通りです。

Pyhton

1missing module named resource - imported by posix, C:\Users\ma8wi\Documents\Python Scripts\testAudio\testGui.py 2missing module named posix - imported by os, C:\Users\ma8wi\Documents\Python Scripts\testAudio\testGui.py 3missing module named _posixsubprocess - imported by subprocess, C:\Users\ma8wi\Documents\Python Scripts\testAudio\testGui.py 4missing module named 'org.python' - imported by pickle, C:\Users\ma8wi\Documents\Python Scripts\testAudio\testGui.py, xml.sax 5missing module named ce - imported by os, C:\Users\ma8wi\Documents\Python Scripts\testAudio\testGui.py 6missing module named readline - imported by cmd, code, pdb, C:\Users\ma8wi\Documents\Python Scripts\testAudio\testGui.py 7excluded module named _frozen_importlib - imported by importlib, importlib.abc, C:\Users\ma8wi\Documents\Python Scripts\testAudio\testGui.py 8missing module named _frozen_importlib_external - imported by importlib._bootstrap, importlib, importlib.abc, C:\Users\ma8wi\Documents\Python Scripts\testAudio\testGui.py 9missing module named _winreg - imported by platform, vlc, C:\Users\ma8wi\Documents\Python Scripts\testAudio\testGui.py 10missing module named _scproxy - imported by urllib.request 11missing module named java - imported by platform, C:\Users\ma8wi\Documents\Python Scripts\testAudio\testGui.py 12missing module named 'java.lang' - imported by platform, C:\Users\ma8wi\Documents\Python Scripts\testAudio\testGui.py, xml.sax._exceptions 13missing module named vms_lib - imported by platform, C:\Users\ma8wi\Documents\Python Scripts\testAudio\testGui.py 14missing module named termios - imported by tty, vlc, C:\Users\ma8wi\Documents\Python Scripts\testAudio\testGui.py, getpass 15missing module named grp - imported by shutil, tarfile, C:\Users\ma8wi\Documents\Python Scripts\testAudio\testGui.py 16missing module named _dummy_threading - imported by dummy_threading, C:\Users\ma8wi\Documents\Python Scripts\testAudio\testGui.py 17missing module named org - imported by copy, C:\Users\ma8wi\Documents\Python Scripts\testAudio\testGui.py 18missing module named pwd - imported by posixpath, shutil, tarfile, http.server, webbrowser, C:\Users\ma8wi\Documents\Python Scripts\testAudio\testGui.py, netrc, getpass 19missing module named AppKit - imported by keyboard._darwinkeyboard, pyperclip 20missing module named Foundation - imported by pyperclip 21missing module named PyQt4 - imported by pyperclip 22missing module named qtpy - imported by pyperclip 23missing module named gtk - imported by pyperclip 24missing module named StringIO - imported by six 25missing module named Quartz - imported by keyboard._darwinkeyboard 26missing module named fcntl - imported by keyboard._nixcommon 27missing module named Queue - imported by keyboard, keyboard._nixcommon, keyboard._generic

###試したこと
exe化する際にうまくvlcが取り込めていないのか?と思い、vlcを使わないプログラムをexe化してみました。この場合にはうまく動いきました。

###補足情報(言語/FW/ツール等のバージョンなど)
環境は以下の通りです。
・Windows10
・Anaconda 3.3.30
・Python3.5.4
・PyInstaller3.3

初心者ながら、libvlc.dllがうまく見つけられていないのでは?と感じているのですが、対策が全くわかりません。
解決策に心当たりがある方いましたら、よろしくお願いします。
(質問自体初めてなので、情報が不足しているかもしれません、ご指摘いただければ追加します。)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YouheiSakurai

2017/12/10 14:34

質問のコツは上手くいかないところを事細かに説明することです。エラーメッセージ等もあると良いと思います。
Goo_MD

2017/12/10 14:48

わからないながら、情報を追加してみました。よろしくお願いします。
guest

回答2

0

自己解決

下記2つのリンク先を参考にして自己解決いたしました。
Sign up
New issue
ctypes - loading external DLL (not bundled) fails #1685

Recipe Win Load External DLL

以下のコードをexe化しようとしている.pyファイル(私の場合はtestGui.py)の冒頭に追加することで解決しました。

Python

1import ctypes 2import os 3import sys 4 5# Override dll search path. 6ctypes.windll.kernel32.SetDllDirectoryW(YOUR_PATH_WITH_EXTERNAL_DLL) # 私の場合は"C:\Program Files\VideoLAN\VLC" 7# Init code to load external dll 8ctypes.CDLL('library.dll') #vlcを読み込ませたいのでlibvlc.dll 9# ... 10# Restore dll search path. 11ctypes.windll.kernel32.SetDllDirectoryW(sys._MEIPASS)

正直このコードが一体何をしているのか、全くわかりませんがうまく動いたので記録として残します。
(おそらくlibrary.dllをバンドルするのではなく、参照先を指定しているのだと思います。なのでvlcがインストールされていない環境ではきっと動かないのではないかと思います)

投稿2017/12/11 15:08

Goo_MD

総合スコア11

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ご推察の通り、exe化する際にうまくvlcが取り込めていないはずです。
外部ファイルはPathを追加し、意図的にexeにbundleさせる必要があるようです。

おそらくこちらに書かれている内容で修正ができると思います(私も同様でしたので)。

pyinstallerの*.specファイル作成法。
https://qiita.com/cheuora/items/39b3203400e1e15248ed

webサイト内で書かれているspecファイルは、pyinstallerでexe化処理する際に作成されていると思います。そのファイルをベースに編集すると良いと思います。

■作成環境
Win,Mac : Python3.5.2 / PyInstaller3.2.1

投稿2017/12/11 05:59

mdj

総合スコア220

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Goo_MD

2017/12/11 15:09 編集

教えていただきありがとうございます。 せっかくリンクを張っていただいたのですが、リンク先の方法ではうまくいきませんでした・・・ 別のページを参考にして自己解決しましたので、まとめます。 教えていただきありがとうございました。
mdj

2017/12/12 01:02

レスありがとうございます。 インストールされたソフトのDLLの場合は手法が違うのですね。ためになりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問