RefactoringRope/RefactoringServer.py

changeset 285
247d62c682dc
parent 280
45f0a0511acd
child 287
09afe26b734c
--- a/RefactoringRope/RefactoringServer.py	Sun Oct 28 12:30:59 2018 +0100
+++ b/RefactoringRope/RefactoringServer.py	Sat Nov 03 18:21:20 2018 +0100
@@ -2064,6 +2064,7 @@
         ok = False
         
         if self.__projectLanguage.startswith("Python"):
+            clientEnv = os.environ.copy()
             try:
                 # new code using virtual environments
                 venvManager = e5App().getObject("VirtualEnvManager")
@@ -2097,6 +2098,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
                 else:
                     interpreter = ""
             except KeyError:
@@ -2114,7 +2129,7 @@
                     else:
                         interpreter = ""
             if interpreter:
-                ok = self.__startRefactoringClient(interpreter)
+                ok = self.__startRefactoringClient(interpreter, clientEnv)
                 if not ok:
                     self.__ui.appendToStderr(self.tr(
                         "Project language '{0}' is not supported because"
@@ -2286,19 +2301,23 @@
                 E5MessageBox.StandardButtons(
                     E5MessageBox.Ok))
     
-    def __startRefactoringClient(self, interpreter):
+    def __startRefactoringClient(self, interpreter, clientEnv):
         """
         Private method to start the refactoring client.
         
         @param interpreter interpreter to be used for the refactoring client
         @type str
+        @param clientEnv dictionary with environment variables to run the
+            interpreter with
+        @type dict
         @return flag indicating a successful client start
         @rtype bool
         """
         if interpreter:
             client = os.path.join(os.path.dirname(__file__),
                                   "RefactoringClient.py")
-            ok = self.startClient(interpreter, client, [self.__projectpath])
+            ok = self.startClient(interpreter, client, [self.__projectpath],
+                                  environment=clientEnv)
         else:
             ok = False
         return ok

eric ide

mercurial