Sun, 08 May 2022 15:44:29 +0200
Added a few more API calls to the Project object to
- get the virtual environment name
- get the interpreter
- get the executable search path prefix
of the environment used by the open project.
--- a/eric7/Debugger/DebuggerInterfacePython.py Sat May 07 16:30:34 2022 +0200 +++ b/eric7/Debugger/DebuggerInterfacePython.py Sun May 08 15:44:29 2022 +0200 @@ -366,10 +366,6 @@ # start debugger with project specific settings debugClient = project.getDebugProperty("DEBUGCLIENT") - if not venvName: - venvName = project.getDebugProperty("VIRTUALENV") - if not venvName and project.getProjectLanguage() == "Python3": - venvName = Preferences.getDebugger("Python3VirtualEnv") redirect = ( str(configOverride["redirect"]) @@ -384,14 +380,8 @@ else '' ) - venvManager = ericApp().getObject("VirtualEnvManager") - interpreter = venvManager.getVirtualenvInterpreter(venvName) - execPath = venvManager.getVirtualenvExecPath(venvName) - if ( - interpreter == "" and - project.getProjectLanguage().startswith("Python") - ): - interpreter = Globals.getPythonExecutable() + execPath = project.getProjectExecPath() + interpreter = project.getProjectInterpreter() if interpreter == "": EricMessageBox.critical( None,
--- a/eric7/JediInterface/JediServer.py Sat May 07 16:30:34 2022 +0200 +++ b/eric7/JediInterface/JediServer.py Sun May 08 15:44:29 2022 +0200 @@ -852,25 +852,11 @@ if "PATH" in clientEnv: clientEnv["PATH"] = self.__ui.getOriginalPathString() - if (projectLanguage.startswith("Python") or - projectLanguage == "MicroPython"): - # new code using virtual environments - venvManager = ericApp().getObject("VirtualEnvManager") - - # get virtual environment from project first - venvName = self.__ericProject.getDebugProperty("VIRTUALENV") - if not venvName: - # get it from debugger settings next - if projectLanguage in ("Python3", "MicroPython", "Cython"): - venvName = Preferences.getDebugger("Python3VirtualEnv") - if not venvName: - venvName, _ = venvManager.getDefaultEnvironment() - else: - venvName = "" - if venvName: - interpreter = venvManager.getVirtualenvInterpreter( - venvName) - execPath = venvManager.getVirtualenvExecPath(venvName) + if projectLanguage in ("Python3", "MicroPython", "Cython"): + interpreter = self.__ericProject.getProjectInterpreter( + resolveGlobal=False) + if interpreter: + execPath = self.__ericProject.getProjectExecPath() # build a suitable environment if execPath:
--- a/eric7/PipInterface/Pip.py Sat May 07 16:30:34 2022 +0200 +++ b/eric7/PipInterface/Pip.py Sun May 08 15:44:29 2022 +0200 @@ -203,16 +203,9 @@ @return interpreter path @rtype str """ - if venvName == self.getProjectEnvironmentString(): - venvName = ( - ericApp().getObject("Project") - .getDebugProperty("VIRTUALENV") - ) - if not venvName: - # fall back to interpreter used to run eric7 - return Globals.getPythonExecutable() - interpreter = ( + ericApp().getObject("Project").getProjectInterpreter() + if venvName == self.getProjectEnvironmentString() else ericApp().getObject("VirtualEnvManager") .getVirtualenvInterpreter(venvName) )
--- a/eric7/Project/CreateDialogCodeDialog.py Sat May 07 16:30:34 2022 +0200 +++ b/eric7/Project/CreateDialogCodeDialog.py Sun May 08 15:44:29 2022 +0200 @@ -161,7 +161,7 @@ venvManager = ericApp().getObject("VirtualEnvManager") projectType = self.project.getProjectType() - venvName = self.project.getDebugProperty("VIRTUALENV") + venvName = self.project.getProjectVenv(resolveDebugger=False) if not venvName: # no project specific environment, try a type specific one if projectType in ("PyQt5", "PySide2"):
--- a/eric7/Project/Project.py Sat May 07 16:30:34 2022 +0200 +++ b/eric7/Project/Project.py Sun May 08 15:44:29 2022 +0200 @@ -39,6 +39,7 @@ from EricGui.EricAction import EricAction, createActionGroup +import Globals import Preferences import Utilities @@ -3704,6 +3705,67 @@ """ return self.pdata["DESCRIPTION"] + def getProjectVenv(self, resolveDebugger=True): + """ + Public method to get the name of the virtual environment used by the + project. + + @param resolveDebugger flag indicating to resolve the virtual + environment name via the debugger settings if none was configured + @type bool + @return name of the project's virtual environment + @rtype str + """ + venvName = self.getDebugProperty("VIRTUALENV") + if ( + not venvName and + resolveDebugger and + self.getProjectLanguage() in ("Python3", "MicroPython", "Cython") + ): + venvName = Preferences.getDebugger("Python3VirtualEnv") + + return venvName + + def getProjectInterpreter(self, resolveGlobal=True): + """ + Public method to get the path of the interpreter used by the project. + + @param resolveGlobal flag indicating to resolve the interpreter using + the global interpreter if no project of debugger specific + environment was configured + @type bool + @return path of the project's interpreter + @rtype str + """ + interpreter = "" + venvName = self.getProjectVenv() + if venvName: + interpreter = ( + ericApp().getObject("VirtualEnvManager") + .getVirtualenvInterpreter(venvName) + ) + if not interpreter and resolveGlobal: + interpreter = Globals.getPythonExecutable() + + return interpreter + + def getProjectExecPath(self): + """ + Public method to get the executable search path prefix of the project. + + @return executable search path prefix + @rtype str + """ + execPath = "" + venvName = self.getProjectVenv() + if venvName: + execPath = ( + ericApp().getObject("VirtualEnvManager") + .getVirtualenvExecPath(venvName) + ) + + return execPath + def __isInPdata(self, fn): """ Private method used to check, if the passed in filename is project