diff -r 40a11619ee77 -r ea60ea85067a Debugger/DebuggerInterfacePython.py --- a/Debugger/DebuggerInterfacePython.py Sat Nov 03 14:16:43 2018 +0100 +++ b/Debugger/DebuggerInterfacePython.py Sat Nov 03 14:19:21 2018 +0100 @@ -55,6 +55,7 @@ self.passive = passive self.process = None self.__variant = pythonVariant + self.__startedVenv = "" self.qsock = None self.queue = [] @@ -123,9 +124,7 @@ for key, value in list(environment.items()): env.insert(key, value) proc.setProcessEnvironment(env) - args = [] - for arg in arguments: - args.append(arg) + args = arguments[:] proc.start(program, args) if not proc.waitForStarted(10000): proc = None @@ -152,8 +151,9 @@ venvName = Preferences.getDebugger("Python2VirtualEnv") else: venvName = Preferences.getDebugger("Python3VirtualEnv") - interpreter = e5App().getObject("VirtualEnvManager")\ - .getVirtualenvInterpreter(venvName) + venvManager = e5App().getObject("VirtualEnvManager") + interpreter = venvManager.getVirtualenvInterpreter(venvName) + execPath = venvManager.getVirtualenvExecPath(venvName) if interpreter == "" and \ int(self.__variant[-1]) == sys.version_info[0]: # use the interpreter used to run eric for identical variants @@ -243,6 +243,12 @@ clientEnv[str(key)] = str(value) except ValueError: pass + if execPath: + if "PATH" in clientEnv: + clientEnv["PATH"] = os.pathsep.join( + [execPath, clientEnv["PATH"]]) + else: + clientEnv["PATH"] = execPath ipaddr = self.debugServer.getHostAddress(True) if runInConsole or Preferences.getDebugger("ConsoleDbgEnabled"): @@ -267,11 +273,15 @@ [debugClient, noencoding, str(port), redirect, ipaddr], clientEnv) if process is None: + self.__startedVenv = "" E5MessageBox.critical( None, self.tr("Start Debugger"), self.tr( """<p>The debugger backend could not be started.</p>""")) + else: + self.__startedVenv = venvName + return process, self.__isNetworked, interpreter def startRemoteForProject(self, port, runInConsole, venvName): @@ -294,16 +304,22 @@ return None, self.__isNetworked, "" # start debugger with project specific settings + debugClient = project.getDebugProperty("DEBUGCLIENT") if not venvName: venvName = project.getDebugProperty("VIRTUALENV") - debugClient = project.getDebugProperty("DEBUGCLIENT") + if not venvName: + if project.getProjectLanguage() == "Python2": + venvName = Preferences.getDebugger("Python2VirtualEnv") + elif project.getProjectLanguage() == "Python3": + venvName = Preferences.getDebugger("Python3VirtualEnv") redirect = str(project.getDebugProperty("REDIRECT")) noencoding = \ project.getDebugProperty("NOENCODING") and '--no-encoding' or '' - interpreter = e5App().getObject("VirtualEnvManager")\ - .getVirtualenvInterpreter(venvName) + venvManager = e5App().getObject("VirtualEnvManager") + interpreter = venvManager.getVirtualenvInterpreter(venvName) + execPath = venvManager.getVirtualenvExecPath(venvName) if interpreter == "" and \ project.getProjectLanguage().startswith("Python") and \ sys.version_info[0] == int(project.getProjectLanguage()[-1]): @@ -365,6 +381,12 @@ clientEnv[str(key)] = str(value) except ValueError: pass + if execPath: + if "PATH" in clientEnv: + clientEnv["PATH"] = os.pathsep.join( + [execPath, clientEnv["PATH"]]) + else: + clientEnv["PATH"] = execPath ipaddr = self.debugServer.getHostAddress(True) if runInConsole or project.getDebugProperty("CONSOLEDEBUGGER"): @@ -390,11 +412,15 @@ [debugClient, noencoding, str(port), redirect, ipaddr], clientEnv) if process is None: + self.__startedVenv = "" E5MessageBox.critical( None, self.tr("Start Debugger"), self.tr( """<p>The debugger backend could not be started.</p>""")) + else: + self.__startedVenv = venvName + return process, self.__isNetworked, interpreter def getClientCapabilities(self): @@ -996,13 +1022,18 @@ elif method == "ResponseCapabilities": self.clientCapabilities = params["capabilities"] self.debugServer.signalClientCapabilities( - params["capabilities"], params["clientType"]) + params["capabilities"], + params["clientType"], + self.__startedVenv, + ) elif method == "ResponseBanner": self.debugServer.signalClientBanner( params["version"], params["platform"], - params["dbgclient"]) + params["dbgclient"], + self.__startedVenv, + ) elif method == "ResponseOK": self.debugServer.signalClientStatement(False)