diff -r 698660ef7350 -r c6afba2049cf eric7/PipInterface/PipPackagesWidget.py --- a/eric7/PipInterface/PipPackagesWidget.py Fri Jun 03 12:09:02 2022 +0200 +++ b/eric7/PipInterface/PipPackagesWidget.py Fri Jun 03 19:54:57 2022 +0200 @@ -1200,6 +1200,10 @@ self.tr("Update Vulnerability Database"), self.__updateVulnerabilityDbCache) self.__pipMenu.addSeparator() + self.__cyclonedxAct = self.__pipMenu.addAction( + self.tr("Create SBOM file"), + self.__createSBOMFile) + self.__pipMenu.addSeparator() self.__cacheInfoAct = self.__pipMenu.addAction( self.tr("Show Cache Info..."), self.__showCacheInfo) @@ -1260,6 +1264,8 @@ self.__checkVulnerabilityAct.setEnabled( enable & self.vulnerabilityCheckBox.isEnabled()) + self.__cyclonedxAct.setEnabled(enable) + self.__showLicensesDialogAct.setEnabled(enable) @pyqtSlot() @@ -1850,3 +1856,19 @@ parent=self ) dlg.exec() + + ################################################################## + ## Interface to create a SBOM file using CycloneDX + ################################################################## + + @pyqtSlot() + def __createSBOMFile(self): + """ + Private slot to create a "Software Bill Of Material" file. + """ + import CycloneDXInterface + + venvName = self.environmentsComboBox.currentText() + if venvName == self.__pip.getProjectEnvironmentString(): + venvName = "<project>" + CycloneDXInterface.createCycloneDXFile(venvName)