diff -r c2cb561a39b0 -r 967a88a16a21 src/eric7/PipInterface/Pip.py --- a/src/eric7/PipInterface/Pip.py Sat Nov 30 11:09:02 2024 +0100 +++ b/src/eric7/PipInterface/Pip.py Tue Jan 14 17:29:56 2025 +0100 @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2015 - 2024 Detlev Offenbach <detlev@die-offenbachs.de> +# Copyright (c) 2015 - 2025 Detlev Offenbach <detlev@die-offenbachs.de> # """ @@ -961,6 +961,7 @@ if callback: if self.__outdatedProc is not None: + self.__outdatedProc.finished.disconnect() self.__outdatedProc.kill() # end the process forcefully self.__outdatedProc = None @@ -972,10 +973,11 @@ proc.start(interpreter, args) return None - proc = QProcess() - proc.start(interpreter, args) - if proc.waitForStarted(15000) and proc.waitForFinished(30000): - packages = self.__extractOutdatedPackages(proc) + else: + proc = QProcess() + proc.start(interpreter, args) + if proc.waitForStarted(15000) and proc.waitForFinished(30000): + packages = self.__extractOutdatedPackages(proc) return packages @@ -1364,3 +1366,33 @@ licenses = json.loads(output) return licenses + + ####################################################################### + ## Cleanup of the site-packages directory in case pip updated or + ## removed packages currently in use. + ####################################################################### + + def runCleanup(self, envName): + """ + Public method to perform a cleanup run for a given environment. + + @param envName name of the environment to get the licenses for + @type str + @return flag indicating a successful removal. A missing environment + name or an undefined Python interpreter is treated as success + (i.e. nothing to do). + @rtype bool + """ + if envName: + interpreter = self.getVirtualenvInterpreter(envName) + if interpreter: + args = [os.path.join(os.path.dirname(__file__), "pipcleanup.py")] + + proc = QProcess() + proc.start(interpreter, args) + if proc.waitForStarted(15000) and proc.waitForFinished(30000): + return proc.exitCode() == 0 + + return False + + return True