PyInstallerでDLL等の保存先を変更したい
お世話になります。
PyInstallerでDLLやPYDファイルの保存先ディレクトリを変更したいと考えています。
一応下記の英語版にある質問の1番目の回答で、とりあえず、実現できることは確認できました。
python - pyInstaller changing dll and pyd output location
ですが、この方法を用いてもWxPythonを利用したプログラムで、WxPythonのDLLの保存先を変更することはできないようです。
環境はWindows10、Python3.7です。
長くなりますが、スクリプトと実行したコマンド、エラー内容を記載します。
スクリプト
下記スクリプトを「clock.py」として作成する。
import wx
from datetime import datetime
from pubsub import pub
from time import sleep
from threading import Thread
class mainFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1, size = wx.Size(800, 400))
self.SetTitle("時計")
mainScreen(self)
class mainScreen(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent, -1)
self.parent = parent
self.clock_label = wx.StaticText(self, -1, "時刻")
self.clock_text = wx.TextCtrl(self, -1, "", style=wx.TE_READONLY)
vSizer = wx.BoxSizer(wx.VERTICAL)
vSizer.Add(self.clock_label, 0)
vSizer.Add(self.clock_text, 0)
self.SetSizer(vSizer)
self.clock_text.SetFocus()
pub.subscribe(self.update_clock, "time_changed")
self.clock_thread = Thread(target=self.clock_start)
self.clock_thread.setDaemon(True)
self.clock_thread.start()
def clock_start(self):
while True:
now = datetime.now()
wx.CallAfter(pub.sendMessage, "time_changed", msg="%s:%s:%s" % (now.hour, now.minute, now.second))
sleep(0.1)
def update_clock(self, msg):
self.clock_text.SetValue(msg)
app = wx.App(redirect=False)
MyApp = mainFrame()
MyApp.Show(True)
app.MainLoop()
実行内容
下記内容を「hook.py」として「clock.py」と同じフォルダに保存する。
import sys
import os
sys.path.append(os.path.join(os.path.dirname(sys.argv[0]), "libs"))コマンドプロンプトを開いて、下記コマンドで実行ファイルを作成する。
なお、ディレクトリが「clock.py」の保存ディレクトリでない場合は、適宜「cd」コマンドで移動する。pyinstaller --clean --log-level WARN --runtime-hook hook.py clock.py
「clock.py」のフォルダ内の「dist\clock」フォルダへ移動する。
- 「libs」フォルダを作成し、「python37.dll」以外のファイルを、先ほど作成した「libs」フォルダへ移動する。
- コマンドプロンプトを開いて、「clock.exe」を実行する。
なお、ディレクトリが「clock.exe」の保存ディレクトリでない場合は、適宜「cd」コマンドで移動する。 - すると、下記のエラーが発生する。
エラー内容
Traceback (most recent call last):
File "clock.py", line 1, in <module>
File "C:\Python37\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 627, in exec_module
exec(bytecode, module.__dict__)
File "site-packages\wx\__init__.py", line 17, in <module>
File "C:\Python37\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 627, in exec_module
exec(bytecode, module.__dict__)
File "site-packages\wx\core.py", line 12, in <module>
ImportError: DLL load failed: 指定されたモジュールが見つかりません。
[12296] Failed to execute script clock
補足
試しに「wx」フォルダも「libs」フォルダに移動してみましたが、変化なしでした。
何かよい方法があれば、アドバイスいただけると幸いです。
それとも「wx*.dll」を移動するのは難しいのでしょうか。
よろしくお願いします。