--- a/src/eric7/PipInterface/Pip.py Thu Dec 01 10:18:07 2022 +0100 +++ b/src/eric7/PipInterface/Pip.py Mon Jan 02 11:16:03 2023 +0100 @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2015 - 2022 Detlev Offenbach <detlev@die-offenbachs.de> +# Copyright (c) 2015 - 2023 Detlev Offenbach <detlev@die-offenbachs.de> # """ @@ -16,10 +16,11 @@ from PyQt6.QtNetwork import QNetworkAccessManager, QNetworkReply, QNetworkRequest from PyQt6.QtWidgets import QDialog, QInputDialog, QLineEdit -from eric7 import Globals, Preferences +from eric7 import Preferences from eric7.EricNetwork.EricNetworkProxyFactory import proxyAuthenticationRequired from eric7.EricWidgets import EricMessageBox from eric7.EricWidgets.EricApplication import ericApp +from eric7.SystemUtilities import OSUtilities, PythonUtilities from eric7.UI.DeleteFilesConfirmationDialog import DeleteFilesConfirmationDialog try: @@ -147,9 +148,9 @@ with contextlib.suppress(KeyError): return os.environ["PIP_CONFIG_FILE"] - if Globals.isWindowsPlatform(): + if OSUtilities.isWindowsPlatform(): config = os.path.join(os.environ["APPDATA"], "pip", "pip.ini") - elif Globals.isMacPlatform(): + elif OSUtilities.isMacPlatform(): config = os.path.expanduser("~/Library/Application Support/pip/pip.conf") else: config = os.path.expanduser("~/.config/pip/pip.conf") @@ -168,7 +169,7 @@ # Unix, OS X: $VIRTUAL_ENV/pip.conf # Windows: %VIRTUAL_ENV%\pip.ini - pip = "pip.ini" if Globals.isWindowsPlatform() else "pip.conf" + pip = "pip.ini" if OSUtilities.isWindowsPlatform() else "pip.conf" venvManager = ericApp().getObject("VirtualEnvManager") venvDirectory = ( @@ -204,7 +205,7 @@ """ interpreter = ( ericApp().getObject("Project").getProjectInterpreter() - if venvName == self.getProjectEnvironmentString() + if venvName in (self.getProjectEnvironmentString(), "<project>") else ericApp() .getObject("VirtualEnvManager") .getVirtualenvInterpreter(venvName) @@ -363,7 +364,7 @@ if self.getVirtualenvInterpreter(venvName) in ( sys.executable, - Globals.getPythonExecutable(), + PythonUtilities.getPythonExecutable(), ): upgradePyQt = self.__checkUpgradePyQt(packages) upgradeEric = self.__checkUpgradeEric(packages) @@ -675,7 +676,12 @@ return packages def getOutdatedPackages( - self, envName, localPackages=True, notRequired=False, usersite=False + self, + envName, + localPackages=True, + notRequired=False, + usersite=False, + interpreter=None, ): """ Public method to get the list of outdated packages. @@ -683,13 +689,17 @@ @param envName name of the environment to get the packages for @type str @param localPackages flag indicating to get local packages only - @type bool + (defaults to False) + @type bool (optional) @param notRequired flag indicating to list packages that are not - dependencies of installed packages as well - @type bool + dependencies of installed packages as well (defaults to False) + @type bool (optional) @param usersite flag indicating to only list packages installed - in user-site - @type bool + in user-site (defaults to False) + @type bool (optional) + @param interpreter path of an interpreter executable. If this is not + None, it will override the given environment name (defaults to None) + @type str (optional) @return list of tuples containing the package name, installed version and available version @rtype list of tuple of (str, str, str) @@ -697,7 +707,8 @@ packages = [] if envName: - interpreter = self.getVirtualenvInterpreter(envName) + if interpreter is None: + interpreter = self.getVirtualenvInterpreter(envName) if interpreter: args = [ "-m", @@ -746,30 +757,34 @@ return packages - def checkPackageOutdated(self, packageStart, envName): + def checkPackagesOutdated(self, packageStarts, envName, interpreter=None): """ - Public method to check, if a group of packages is outdated. + Public method to check, if groups of packages are outdated. - @param packageStart start string for package names to be checked + @param packageStarts list of start strings for package names to be checked (case insensitive) @type str @param envName name of the environment to get the packages for @type str - @return tuple containing a flag indicating outdated packages and the - list of tuples containing the package name, installed version - and available version - @rtype tuple of (bool, (str, str, str)) + @param interpreter path of an interpreter executable. If this is not + None, it will override the given environment name (defaults to None) + @type str (optional) + @return list of tuples containing the package name, installed version + and available version of outdated packages + @rtype tuple of (str, str, str) """ - filteredPackages = [] + if (bool(envName) or bool(interpreter)) and any(bool(p) for p in packageStarts): + packages = self.getOutdatedPackages(envName, interpreter=interpreter) + filterStrings = tuple( + start.lower() for start in packageStarts if bool(start) + ) + filteredPackages = [ + p for p in packages if p[0].lower().startswith(filterStrings) + ] + else: + filteredPackages = [] - if bool(envName) and bool(packageStart): - packages = self.getOutdatedPackages(envName) - filterStr = packageStart.lower() - filteredPackages = [ - p for p in packages if p[0].lower().startswith(filterStr) - ] - - return bool(filteredPackages), filteredPackages + return filteredPackages def getPackageDetails(self, name, version): """