diff -r 18f32c079abc -r 247d62c682dc RefactoringRope/CodeAssistServer.py --- a/RefactoringRope/CodeAssistServer.py Sun Oct 28 12:30:59 2018 +0100 +++ b/RefactoringRope/CodeAssistServer.py Sat Nov 03 18:21:20 2018 +0100 @@ -505,7 +505,7 @@ params["ExceptionValue"], params["Traceback"])) - def __startCodeAssistClient(self, interpreter, idString): + def __startCodeAssistClient(self, interpreter, idString, clientEnv): """ Private method to start the code assist client with the given interpreter. @@ -514,6 +514,9 @@ @type str @param idString id of the client to be started @type str + @param clientEnv dictionary with environment variables to run the + interpreter with + @type dict @return flag indicating a successful start of the client @rtype bool """ @@ -531,7 +534,7 @@ client = os.path.join(os.path.dirname(__file__), "CodeAssistClient.py") ok = self.startClient(interpreter, client, [configDir], - idString=idString) + idString=idString, environment=clientEnv) if not ok: self.__ui.appendToStderr(self.tr( "'{0}' is not supported because the configured interpreter" @@ -560,10 +563,11 @@ if not ok: # client is not running if idString == CodeAssistServer.IdProject: - interpreter = self.__interpreterForProject() + interpreter, clientEnv = self.__interpreterForProject() else: interpreter = "" venvName = "" + clientEnv = os.environ.copy() try: # new code using virtual environments venvManager = e5App().getObject("VirtualEnvManager") @@ -590,6 +594,21 @@ if venvName: interpreter = \ venvManager.getVirtualenvInterpreter(venvName) + + try: + execPath = \ + venvManager.getVirtualenvExecPath(venvName) + except AttributeError: + # eric6 < 18.12 + execPath = "" + + # build a suitable environment + if execPath: + if "PATH" in clientEnv: + clientEnv["PATH"] = os.pathsep.join( + [execPath, clientEnv["PATH"]]) + else: + clientEnv["PATH"] = execPath except KeyError: # backward compatibility (eric <18.07) if idString == "Python2": @@ -601,19 +620,23 @@ interpreter = \ Preferences.getDebugger("Python3Interpreter") if interpreter: - ok = self.__startCodeAssistClient(interpreter, idString) + ok = self.__startCodeAssistClient(interpreter, idString, + clientEnv) else: ok = False return ok def __interpreterForProject(self): """ - Private method to determine the interpreter for the current project. + Private method to determine the interpreter for the current project and + the environment to run it. - @return interpreter of the current project - @rtype str + @return tuple containing the interpreter of the current project and the + environment variables + @rtype tuple of (str, dict) """ interpreter = "" + clientEnv = os.environ.copy() projectLanguage = self.__e5project.getProjectLanguage() if projectLanguage.startswith("Python"): @@ -650,6 +673,20 @@ if venvName: interpreter = \ venvManager.getVirtualenvInterpreter(venvName) + + try: + execPath = venvManager.getVirtualenvExecPath(venvName) + except AttributeError: + # eric6 < 18.12 + execPath = "" + + # build a suitable environment + if execPath: + if "PATH" in clientEnv: + clientEnv["PATH"] = os.pathsep.join( + [execPath, clientEnv["PATH"]]) + else: + clientEnv["PATH"] = execPath except KeyError: # backward compatibility (eric < 18.07) # get interpreter from project first @@ -663,7 +700,7 @@ interpreter = Preferences.getDebugger( "Python3Interpreter") - return interpreter + return interpreter, clientEnv @pyqtSlot() def handleNewConnection(self):