Skip to content

Commit 40d5740

Browse files
Tweak application for being able to run in a frozen environment
We need to change the way backend is running in a frozen environment: - If no external interpreter is found, we must freeze the server script and use it without interpreters - If the user choose an external interpreter, we must use server.py next that sits next to our frozen executable and add library.zip to sys.path (so that the user does not have to install pyqode in the target environment)
1 parent e519fff commit 40d5740

File tree

2 files changed

+34
-7
lines changed

2 files changed

+34
-7
lines changed

examples/pynotepad/pynotepad/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@
1818

1919

2020
def main():
21+
if hasattr(sys, 'frozen'):
22+
sys.stdout = open('pynotepad_stdout.txt', 'w')
23+
sys.stderr = open('pynotepad_stderr.txt', 'w')
2124
app = QApplication(sys.argv)
2225
if not Settings().interpreter:
2326
Settings().interpreter = sys.executable

examples/pynotepad/pynotepad/main_window.py

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ def __init__(self):
2828
self.setup_actions()
2929
self.setup_status_bar_widgets()
3030
self.on_current_tab_changed()
31-
self.intepreter_group = QtWidgets.QActionGroup(self.menuPython_interpreter)
31+
self.intepreter_group = QtWidgets.QActionGroup(
32+
self.menuPython_interpreter)
3233
for interpreter in get_interpreters():
3334
a = self.menuPython_interpreter.addAction(interpreter)
3435
a.setCheckable(True)
@@ -43,8 +44,9 @@ def on_interpreter_toggled(self, action):
4344
interpreter = action.text()
4445
for editor in self.tabWidget.widgets(include_clones=True):
4546
editor.backend.stop()
46-
editor.backend.start(editor.backend.server_script,
47-
interpreter=interpreter, args=editor.backend.args)
47+
editor.backend.start(
48+
editor.backend.server_script,
49+
interpreter=interpreter, args=editor.backend.args)
4850
Settings().interpreter = interpreter
4951

5052
def setup_status_bar_widgets(self):
@@ -74,8 +76,10 @@ def setup_actions(self):
7476
self.actionConfigure_run.triggered.connect(self.on_configure_run)
7577

7678
def _enable_run(self):
77-
self.actionRun.setEnabled(self.tabWidget.current_widget().file.path != '')
78-
self.actionConfigure_run.setEnabled(self.tabWidget.current_widget().file.path != '')
79+
self.actionRun.setEnabled(
80+
self.tabWidget.current_widget().file.path != '')
81+
self.actionConfigure_run.setEnabled(
82+
self.tabWidget.current_widget().file.path != '')
7983

8084
def setup_recent_files_menu(self):
8185
""" Setup the recent files menu and manager """
@@ -121,8 +125,10 @@ def open_file(self, path, line=None):
121125
"""
122126
editor = None
123127
if path:
128+
interpreter, pyserver, args = self._get_backend_parameters()
124129
editor = self.tabWidget.open_document(
125-
path, interpreter=Settings().interpreter)
130+
path, None, interpreter=interpreter, server_script=pyserver,
131+
args=args)
126132
if editor:
127133
self.setup_editor(editor)
128134
self.recent_files_manager.open_file(path)
@@ -131,13 +137,31 @@ def open_file(self, path, line=None):
131137
TextHelper(self.tabWidget.current_widget()).goto_line(line)
132138
return editor
133139

140+
def _get_backend_parameters(self):
141+
"""
142+
Gets the pyqode backend parameters (interpreter and script).
143+
"""
144+
frozen = hasattr(sys, 'frozen')
145+
interpreter = Settings().interpreter
146+
if frozen and interpreter == sys.executable:
147+
interpreter = None
148+
pyserver = server.__file__ if interpreter is not None else 'server.exe'
149+
args = []
150+
if interpreter and frozen:
151+
pyserver = 'server.py'
152+
args.append('--syspath')
153+
args.append(os.path.join(os.getcwd(), 'library.zip'))
154+
return interpreter, pyserver, args
155+
134156
@QtCore.Slot()
135157
def on_new(self):
136158
"""
137159
Add a new empty code editor to the tab widget
138160
"""
161+
interpreter, pyserver, args = self._get_backend_parameters()
139162
self.setup_editor(self.tabWidget.create_new_document(
140-
extension='.py', interpreter=Settings().interpreter))
163+
extension='.py', interpreter=interpreter, server_script=pyserver,
164+
args=args))
141165
self.actionRun.setDisabled(True)
142166
self.actionConfigure_run.setDisabled(True)
143167

0 commit comments

Comments
 (0)