1diff --git a/src/ocrmypdf/_exec/ghostscript.py b/src/ocrmypdf/_exec/ghostscript.py
2index 5c357f1b..f459763a 100644
3--- a/src/ocrmypdf/_exec/ghostscript.py
4+++ b/src/ocrmypdf/_exec/ghostscript.py
5@@ -25,28 +25,7 @@ from ocrmypdf.subprocess import get_version, run, run_polling_stderr
6
7 log = logging.getLogger(__name__)
8
9-missing_gs_error = """
10----------------------------------------------------------------------
11-This error normally occurs when ocrmypdf find can't Ghostscript.
12-Please ensure Ghostscript is installed and its location is added to
13-the system PATH environment variable.
14-
15-For details see:
16- https://ocrmypdf.readthedocs.io/en/latest/installation.html
17----------------------------------------------------------------------
18-"""
19-
20-_gswin = None
21-if os.name == 'nt':
22- _gswin = which('gswin64c')
23- if not _gswin:
24- _gswin = which('gswin32c')
25- if not _gswin:
26- raise MissingDependencyError(missing_gs_error)
27- _gswin = Path(_gswin).stem
28-
29-GS = _gswin if _gswin else 'gs'
30-del _gswin
31+GS = '@gs@'
32
33
34 def version():
35diff --git a/src/ocrmypdf/_exec/jbig2enc.py b/src/ocrmypdf/_exec/jbig2enc.py
36index 2e8a058b..65a09088 100644
37--- a/src/ocrmypdf/_exec/jbig2enc.py
38+++ b/src/ocrmypdf/_exec/jbig2enc.py
39@@ -14,7 +14,7 @@ from ocrmypdf.subprocess import get_version, run
40
41
42 def version():
43- return get_version('jbig2', regex=r'jbig2enc (\d+(\.\d+)*).*')
44+ return get_version('@jbig2@', regex=r'jbig2enc (\d+(\.\d+)*).*')
45
46
47 def available():
48@@ -27,7 +27,7 @@ def available():
49
50 def convert_group(*, cwd, infiles, out_prefix):
51 args = [
52- 'jbig2',
53+ '@jbig2@',
54 '-b',
55 out_prefix,
56 '-s', # symbol mode (lossy)
57@@ -46,7 +46,7 @@ def convert_group_mp(args):
58
59
60 def convert_single(*, cwd, infile, outfile):
61- args = ['jbig2', '-p', infile]
62+ args = ['@jbig2@', '-p', infile]
63 with open(outfile, 'wb') as fstdout:
64 proc = run(args, cwd=cwd, stdout=fstdout, stderr=PIPE)
65 proc.check_returncode()
66diff --git a/src/ocrmypdf/_exec/pngquant.py b/src/ocrmypdf/_exec/pngquant.py
67index ca8a4542..d0544174 100644
68--- a/src/ocrmypdf/_exec/pngquant.py
69+++ b/src/ocrmypdf/_exec/pngquant.py
70@@ -19,7 +19,7 @@ from ocrmypdf.subprocess import get_version, run
71
72
73 def version():
74- return get_version('pngquant', regex=r'(\d+(\.\d+)*).*')
75+ return get_version('@pngquant@', regex=r'(\d+(\.\d+)*).*')
76
77
78 def available():
79@@ -46,7 +46,7 @@ def input_as_png(input_file: Path):
80 def quantize(input_file: Path, output_file: Path, quality_min: int, quality_max: int):
81 with input_as_png(input_file) as input_stream:
82 args = [
83- 'pngquant',
84+ '@pngquant@',
85 '--force',
86 '--skip-if-larger',
87 '--quality',
88diff --git a/src/ocrmypdf/_exec/tesseract.py b/src/ocrmypdf/_exec/tesseract.py
89index 33ead41e..5840f7c1 100644
90--- a/src/ocrmypdf/_exec/tesseract.py
91+++ b/src/ocrmypdf/_exec/tesseract.py
92@@ -78,7 +78,7 @@ class TesseractVersion(StrictVersion):
93
94
95 def version():
96- return get_version('tesseract', regex=r'tesseract\s(.+)')
97+ return get_version('@tesseract@', regex=r'tesseract\s(.+)')
98
99
100 def has_user_words():
101@@ -100,7 +100,7 @@ def get_languages():
102 msg += output
103 return msg
104
105- args_tess = ['tesseract', '--list-langs']
106+ args_tess = ['@tesseract@', '--list-langs']
107 try:
108 proc = run(
109 args_tess,
110@@ -122,7 +122,7 @@ def get_languages():
111
112
113 def tess_base_args(langs: List[str], engine_mode: Optional[int]) -> List[str]:
114- args = ['tesseract']
115+ args = ['@tesseract@']
116 if langs:
117 args.extend(['-l', '+'.join(langs)])
118 if engine_mode is not None:
119diff --git a/src/ocrmypdf/_exec/unpaper.py b/src/ocrmypdf/_exec/unpaper.py
120index 3c3ae72c..d269966a 100644
121--- a/src/ocrmypdf/_exec/unpaper.py
122+++ b/src/ocrmypdf/_exec/unpaper.py
123@@ -31,7 +31,7 @@ log = logging.getLogger(__name__)
124
125
126 def version() -> str:
127- return get_version('unpaper')
128+ return get_version('@unpaper@')
129
130
131 def _setup_unpaper_io(tmpdir: Path, input_file: Path) -> Tuple[Path, Path]:
132@@ -71,7 +71,7 @@ def _setup_unpaper_io(tmpdir: Path, input_file: Path) -> Tuple[Path, Path]:
133 def run(
134 input_file: Path, output_file: Path, *, dpi: DecFloat, mode_args: List[str]
135 ) -> None:
136- args_unpaper = ['unpaper', '-v', '--dpi', str(round(dpi, 6))] + mode_args
137+ args_unpaper = ['@unpaper@', '-v', '--dpi', str(round(dpi, 6))] + mode_args
138
139 with TemporaryDirectory() as tmpdir:
140 input_pnm, output_pnm = _setup_unpaper_io(Path(tmpdir), input_file)
141diff --git a/src/ocrmypdf/leptonica.py b/src/ocrmypdf/leptonica.py
142index e4814f1a..fdaf7ea4 100644
143--- a/src/ocrmypdf/leptonica.py
144+++ b/src/ocrmypdf/leptonica.py
145@@ -33,14 +33,7 @@ from ocrmypdf.lib._leptonica import ffi
146
147 logger = logging.getLogger(__name__)
148
149-if os.name == 'nt':
150- from ocrmypdf.subprocess._windows import shim_env_path
151-
152- libname = 'liblept-5'
153- os.environ['PATH'] = shim_env_path()
154-else:
155- libname = 'lept'
156-_libpath = find_library(libname)
157+_libpath = '@liblept@'
158 if not _libpath:
159 raise MissingDependencyError(
160 """