From 510f67e613ac3545f19bc6f77fc40449581f5c3e Mon Sep 17 00:00:00 2001 From: domna Date: Tue, 11 Jun 2024 20:05:33 +0200 Subject: [PATCH 1/4] Adds linux build spec and fix for logo --- noScribe-linux.spec | 100 ++++++++++++++++++++++++++++++++++++++++++++ noScribe.py | 5 ++- 2 files changed, 104 insertions(+), 1 deletion(-) create mode 100644 noScribe-linux.spec diff --git a/noScribe-linux.spec b/noScribe-linux.spec new file mode 100644 index 0000000..a792859 --- /dev/null +++ b/noScribe-linux.spec @@ -0,0 +1,100 @@ +from PyInstaller.utils.hooks import collect_all + +# noScribe + +noScribe_a = Analysis( + ['noScribe.py'], + pathex=[], + binaries=[], + datas=[('trans', 'trans/'), ('noScribeLogo.png', '.'), ('graphic_sw.png', '.'), ('ffmpeg', '.'), ('models/faster-whisper-small', 'models/faster-whisper-small/'), ('models/faster-whisper-large-v2', 'models/faster-whisper-large-v2/'), ('prompt.yml', '.'), ('LICENSE.txt', '.'), ('README.md', '.')], + hiddenimports=['PIL', 'PIL._imagingtk', 'PIL._tkinter_finder'], + hookspath=[], + hooksconfig={}, + runtime_hooks=[], + excludes=[], + noarchive=False, +) + +noScribe_pyz = PYZ(noScribe_a.pure) + +noScribe_exe = EXE( + noScribe_pyz, + noScribe_a.scripts, + [], + exclude_binaries=True, + name='noScribe', + debug=False, + bootloader_ignore_signals=False, + strip=False, + upx=True, + console=False, + disable_windowed_traceback=False, + argv_emulation=False, + target_arch=None, + codesign_identity=None, + entitlements_file=None, + icon=['noScribeLogo.ico'], +) + +# diarize + +diarize_datas = [('models/pyannote_config.yaml', 'models/.'), ('/home/dobener/.pyenv/versions/scribe/lib/python3.9/site-packages/lightning', 'lightning/'), ('/home/dobener/.pyenv/versions/scribe/lib/python3.9/site-packages/lightning_fabric', 'lightning_fabric'), ('/home/dobener/.pyenv/versions/scribe/lib/python3.9/site-packages/torchaudio', 'torchaudio'), ('/home/dobener/.pyenv/versions/scribe/lib/python3.9/site-packages/pyannote', 'pyannote/'), ('/home/dobener/.pyenv/versions/scribe/lib/python3.9/site-packages/pytorch_metric_learning', 'pytorch_metric_learning/'), ('/home/dobener/.pyenv/versions/scribe/lib/python3.9/site-packages/sklearn', 'sklearn/'), ('models/pytorch_model.bin', 'models/.'), ('/home/dobener/.pyenv/versions/scribe/lib/python3.9/site-packages/asteroid_filterbanks', 'asteroid_filterbanks/'), ('/home/dobener/.pyenv/versions/scribe/lib/python3.9/site-packages/pytorch_lightning', 'pytorch_lightning/'), ('models/torch', 'models/torch/')] +diarize_binaries = [] +diarize_hiddenimports = [] +diarize_tmp_ret = collect_all('speechbrain') +diarize_datas += diarize_tmp_ret[0]; diarize_binaries += diarize_tmp_ret[1]; diarize_hiddenimports += diarize_tmp_ret[2] + +diarize_a = Analysis( + ['diarize.py'], + pathex=[], + binaries=diarize_binaries, + datas=diarize_datas, + hiddenimports=diarize_hiddenimports, + hookspath=[], + hooksconfig={}, + runtime_hooks=[], + excludes=[], + noarchive=False, +) + +diarize_pyz = PYZ(diarize_a.pure) + +diarize_exe = EXE( + diarize_pyz, + diarize_a.scripts, + [], + exclude_binaries=True, + name='diarize', + debug=False, + bootloader_ignore_signals=False, + strip=False, + upx=True, + console=True, + disable_windowed_traceback=False, + argv_emulation=False, + target_arch=None, + codesign_identity=None, + entitlements_file=None, +) + +# final + +coll = COLLECT( + noScribe_exe, + noScribe_a.binaries, + noScribe_a.datas, + diarize_exe, + diarize_a.binaries, + diarize_a.datas, + strip=False, + upx=True, + upx_exclude=[], + name='noScribe', +) + +app = BUNDLE( + coll, + name='noScribe.app', + icon='noScribeLogo.ico', + bundle_identifier='org.noScribe.noScribe', +) diff --git a/noScribe.py b/noScribe.py index 0040188..70b1249 100644 --- a/noScribe.py +++ b/noScribe.py @@ -345,7 +345,10 @@ def __init__(self): if platform.system() in ("Darwin", "Windows"): self.iconbitmap('noScribeLogo.ico') if platform.system() == "Linux": - self.iconphoto(True, tk.PhotoImage(file='noScribeLogo.png')) + if hasattr(sys, "_MEIPASS"): + self.iconphoto(True, tk.PhotoImage(file=os.path.join(sys._MEIPASS, "noScribeLogo.png"))) + else: + self.iconphoto(True, tk.PhotoImage(file='noScribeLogo.png')) # header self.frame_header = ctk.CTkFrame(self, height=100) From c728905006f047b67a3918612f7d71a8b2bb04ef Mon Sep 17 00:00:00 2001 From: domna Date: Tue, 11 Jun 2024 20:11:58 +0200 Subject: [PATCH 2/4] Use generic site packages --- noScribe-linux.spec | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/noScribe-linux.spec b/noScribe-linux.spec index a792859..12decdb 100644 --- a/noScribe-linux.spec +++ b/noScribe-linux.spec @@ -1,4 +1,5 @@ from PyInstaller.utils.hooks import collect_all +import site # noScribe @@ -38,7 +39,8 @@ noScribe_exe = EXE( # diarize -diarize_datas = [('models/pyannote_config.yaml', 'models/.'), ('/home/dobener/.pyenv/versions/scribe/lib/python3.9/site-packages/lightning', 'lightning/'), ('/home/dobener/.pyenv/versions/scribe/lib/python3.9/site-packages/lightning_fabric', 'lightning_fabric'), ('/home/dobener/.pyenv/versions/scribe/lib/python3.9/site-packages/torchaudio', 'torchaudio'), ('/home/dobener/.pyenv/versions/scribe/lib/python3.9/site-packages/pyannote', 'pyannote/'), ('/home/dobener/.pyenv/versions/scribe/lib/python3.9/site-packages/pytorch_metric_learning', 'pytorch_metric_learning/'), ('/home/dobener/.pyenv/versions/scribe/lib/python3.9/site-packages/sklearn', 'sklearn/'), ('models/pytorch_model.bin', 'models/.'), ('/home/dobener/.pyenv/versions/scribe/lib/python3.9/site-packages/asteroid_filterbanks', 'asteroid_filterbanks/'), ('/home/dobener/.pyenv/versions/scribe/lib/python3.9/site-packages/pytorch_lightning', 'pytorch_lightning/'), ('models/torch', 'models/torch/')] +site_packages = site.getsitepackages() +diarize_datas = [('models/pyannote_config.yaml', 'models/.'), (f'{site_packages}/lightning', 'lightning/'), (f'{site_packages}lightning_fabric', 'lightning_fabric'), (f'{site_packages}/torchaudio', 'torchaudio'), (f'{site_packages}/pyannote', 'pyannote/'), (f'{site_packages}/pytorch_metric_learning', 'pytorch_metric_learning/'), (f'{site_packages}/sklearn', 'sklearn/'), ('models/pytorch_model.bin', 'models/.'), (f'{site_packages}/asteroid_filterbanks', 'asteroid_filterbanks/'), (f'{site_packages}/pytorch_lightning', 'pytorch_lightning/'), ('models/torch', 'models/torch/')] diarize_binaries = [] diarize_hiddenimports = [] diarize_tmp_ret = collect_all('speechbrain') From f697d244386771b1e471515f263566d01ede4d86 Mon Sep 17 00:00:00 2001 From: domna Date: Tue, 11 Jun 2024 20:21:56 +0200 Subject: [PATCH 3/4] Fix getting site packages --- noScribe-linux.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/noScribe-linux.spec b/noScribe-linux.spec index 12decdb..f16a319 100644 --- a/noScribe-linux.spec +++ b/noScribe-linux.spec @@ -40,7 +40,7 @@ noScribe_exe = EXE( # diarize site_packages = site.getsitepackages() -diarize_datas = [('models/pyannote_config.yaml', 'models/.'), (f'{site_packages}/lightning', 'lightning/'), (f'{site_packages}lightning_fabric', 'lightning_fabric'), (f'{site_packages}/torchaudio', 'torchaudio'), (f'{site_packages}/pyannote', 'pyannote/'), (f'{site_packages}/pytorch_metric_learning', 'pytorch_metric_learning/'), (f'{site_packages}/sklearn', 'sklearn/'), ('models/pytorch_model.bin', 'models/.'), (f'{site_packages}/asteroid_filterbanks', 'asteroid_filterbanks/'), (f'{site_packages}/pytorch_lightning', 'pytorch_lightning/'), ('models/torch', 'models/torch/')] +diarize_datas = [('models/pyannote_config.yaml', 'models/.'), (f'{site_packages[0]}/lightning', 'lightning/'), (f'{site_packages[0]}/lightning_fabric', 'lightning_fabric'), (f'{site_packages[0]}/torchaudio', 'torchaudio'), (f'{site_packages[0]}/pyannote', 'pyannote/'), (f'{site_packages[0]}/pytorch_metric_learning', 'pytorch_metric_learning/'), (f'{site_packages[0]}/sklearn', 'sklearn/'), ('models/pytorch_model.bin', 'models/.'), (f'{site_packages[0]}/asteroid_filterbanks', 'asteroid_filterbanks/'), (f'{site_packages[0]}/pytorch_lightning', 'pytorch_lightning/'), ('models/torch', 'models/torch/')] diarize_binaries = [] diarize_hiddenimports = [] diarize_tmp_ret = collect_all('speechbrain') From 29153f7d1336970cb890973d6f7cb044880eb1e6 Mon Sep 17 00:00:00 2001 From: domna Date: Thu, 13 Jun 2024 12:15:50 +0200 Subject: [PATCH 4/4] Add dockerfile for building of linux installer --- Dockerfile | 6 ++++++ generate_linux_binary.sh | 4 ++++ noScribe.py | 5 ++++- 3 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 Dockerfile create mode 100644 generate_linux_binary.sh diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..4190b11 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,6 @@ +FROM python:3.9 + +WORKDIR /usr/src/app + +COPY environments/requirements-linux.txt ./requirements.txt +RUN pip install --no-cache-dir -r requirements.txt diff --git a/generate_linux_binary.sh b/generate_linux_binary.sh new file mode 100644 index 0000000..185fca3 --- /dev/null +++ b/generate_linux_binary.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +docker buildx build --platform linux/amd64 -t noscribe . +docker run --rm -it --mount type=bind,src=.,dst=/usr/src/app noscribe pyinstaller noScribe-linux.spec \ No newline at end of file diff --git a/noScribe.py b/noScribe.py index 70b1249..2d0ea69 100644 --- a/noScribe.py +++ b/noScribe.py @@ -566,7 +566,10 @@ def launch_editor(self, file=''): elif platform.system() == "Darwin": # = MAC program = os.path.join(os.sep, 'Applications', 'noScribeEdit.app', 'Contents', 'MacOS', 'noScribeEdit') elif platform.system() == "Linux": - program = os.path.join(app_dir, 'noScribeEdit', "noScribeEdit") + if hasattr(sys, "_MEIPASS"): + program = os.path.join(sys._MEIPASS, 'noScribeEdit', "noScribeEdit") + else: + program = os.path.join(app_dir, 'noScribeEdit', "noScribeEdit") kwargs = {} if platform.system() == 'Windows': # from msdn [1]