src/eric7/CondaInterface/Conda.py

branch
eric7
changeset 11230
8a15b05eeee3
parent 11218
43dfc40728d2
child 11233
295366a93bbf
diff -r 16a129d168f9 -r 8a15b05eeee3 src/eric7/CondaInterface/Conda.py
--- a/src/eric7/CondaInterface/Conda.py	Wed Apr 23 17:23:57 2025 +0200
+++ b/src/eric7/CondaInterface/Conda.py	Wed Apr 23 18:02:09 2025 +0200
@@ -16,9 +16,12 @@
 
 from eric7 import Preferences
 from eric7.EricWidgets import EricMessageBox
+from eric7.EricWidgets.EricApplication import ericApp
 from eric7.SystemUtilities import OSUtilities
+from eric7.VirtualEnv.VirtualenvMeta import VirtualenvMetaData
+from eric7.VirtualEnv.VirtualenvRegistry import VirtualenvType
 
-from . import condaVersion, rootPrefix
+from . import condaVersion, isCondaAvailable, rootPrefix
 from .CondaExecDialog import CondaExecDialog
 
 
@@ -36,6 +39,7 @@
     condaEnvironmentRemoved = pyqtSignal()
 
     RootName = QCoreApplication.translate("Conda", "<root>")
+    EnvironmentType = "conda"
 
     def __init__(self, parent=None):
         """
@@ -48,10 +52,95 @@
 
         self.__ui = parent
 
+        envManager = ericApp().getObject("VirtualEnvManager")
+        envManager.registerType(
+            VirtualenvType(
+                name=Conda.EnvironmentType,
+                visual_name=self.tr("Anaconda"),
+                createFunc=self.createCondaVirtualEnvironment,
+                deleteFunc=self.deleteCondaVirtualEnvironment,
+                defaultExecPathFunc=self.condaDefaultExecPath,
+            )
+        )
+
     #######################################################################
     ## environment related methods below
     #######################################################################
 
+    def condaDefaultExecPath(self, venvDirectory):
+        """
+        Public method returning the default PATH prefix for a conda environment.
+
+        @param venvDirectory path of the virtual environment to generate the
+            default PATH prefix for
+        @type str
+        @return default PATH prefix string
+        @rtype str
+        """
+        if OSUtilities.isWindowsPlatform():
+            return os.pathsep.join(
+                [
+                    venvDirectory,
+                    os.path.join(venvDirectory, "Scripts"),
+                    os.path.join(venvDirectory, "Library", "bin"),
+                ]
+            )
+        else:
+            return os.path.join(venvDirectory, "bin")
+
+    def createCondaVirtualEnvironment(self, baseDir=""):
+        """
+        Public method to create an anaconda/miniconda environment.
+
+        Note: This method is used by the Virtual Environment Manager.
+
+        @param baseDir base directory for the virtual environments (defaults to "")
+        @type str (optional)
+        """
+        from .CondaEnvironmentConfigurationDialog import (
+            CondaEnvironmentConfigurationDialog,
+        )
+
+        if not isCondaAvailable():
+            EricMessageBox.critical(
+                self.__ui,
+                self.tr("Create Conda Environment"),
+                self.tr(
+                    "Conda has not been installed or is not configured. Aborting..."
+                ),
+            )
+            return
+
+        dlg = CondaEnvironmentConfigurationDialog(baseDir=baseDir, parent=self.__ui)
+        if dlg.exec() == QDialog.DialogCode.Accepted:
+            resultDict = dlg.getData()
+            # now create the conda environment
+            ok, prefix, interpreter = self.createCondaEnvironment(
+                resultDict["arguments"]
+            )
+            if ok and "--dry-run" not in resultDict["arguments"]:
+                ericApp().getObject("VirtualEnvManager").addVirtualEnv(
+                    VirtualenvMetaData(
+                        name=resultDict["logicalName"],
+                        path=prefix,
+                        interpreter=interpreter,
+                        environment_type=Conda.EnvironmentType,
+                    )
+                )
+
+    def deleteCondaVirtualEnvironment(self, venvMetaData):
+        """
+        Public method to delete a given anaconda/miniconda environment from disk.
+
+        Note: This method is used by the Virtual Environment Manager.
+
+        @param venvMetaData virtual environment meta data structure
+        @type VirtualenvMetaData
+        @return flag indicating success
+        @rtype bool
+        """
+        return self.removeCondaEnvironment(prefix=venvMetaData.path)
+
     def createCondaEnvironment(self, arguments):
         """
         Public method to create a conda environment.

eric ide

mercurial