diff --git a/run-local b/run-local new file mode 100755 index 0000000000..ede41a0d3c --- /dev/null +++ b/run-local @@ -0,0 +1,26 @@ +#!/usr/bin/env python +import importlib +import os +import sys + + +sys.run_local = os.path.abspath(__file__) +base = os.path.dirname(sys.run_local) +src = os.path.join(base, 'src') +if src not in sys.path: + sys.path.insert(0, src) +sys.resources_location = os.path.join(base, 'resources') +sys.extensions_location = os.path.join(src, 'calibre', 'plugins') +entry_point = sys.argv[1] +del sys.argv[1] +del src +del base + +for ep in importlib.import_module('calibre.linux').entry_points.values(): + for line in ep: + q, spec = (x.strip() for x in line.split('=')) + if q == entry_point: + mod, func = spec.split(':') + m = importlib.import_module(mod) + sys.exit(getattr(m, func)()) +raise SystemExit('No entry point named: {}'.format(entry_point)) diff --git a/src/calibre/utils/ipc/launch.py b/src/calibre/utils/ipc/launch.py index a13869db95..63743a7062 100644 --- a/src/calibre/utils/ipc/launch.py +++ b/src/calibre/utils/ipc/launch.py @@ -62,6 +62,8 @@ class Worker(object): def executable(self): if hasattr(sys, 'running_from_setup'): return [sys.executable, os.path.join(sys.setup_dir, 'run-calibre-worker.py')] + if getattr(sys, 'run_local', False): + return [sys.executable, sys.run_local, self.exe_name] e = self.exe_name if iswindows: return os.path.join(os.path.dirname(sys.executable),