src/eric7/Project/ProjectVenvConfigurationDialog.py

Tue, 18 Oct 2022 16:06:21 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Tue, 18 Oct 2022 16:06:21 +0200
branch
eric7
changeset 9413
80c06d472826
parent 9389
7b2344009d7a
child 9473
3f23dbf37dbe
permissions
-rw-r--r--

Changed the eric7 import statements to include the package name (i.e. eric7) in order to not fiddle with sys.path.

9323
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 # Copyright (c) 2022 Detlev Offenbach <detlev@die-offenbachs.de>
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing a dialog to enter the configuration for the embedded environment
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 of the project.
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9 """
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 import glob
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 import os
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14 from PyQt6.QtCore import pyqtSlot
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16
9413
80c06d472826 Changed the eric7 import statements to include the package name (i.e. eric7) in order to not fiddle with sys.path.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9389
diff changeset
17 from eric7.EricWidgets.EricPathPicker import EricPathPickerModes
9323
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 from .Ui_ProjectVenvConfigurationDialog import Ui_ProjectVenvConfigurationDialog
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20
9413
80c06d472826 Changed the eric7 import statements to include the package name (i.e. eric7) in order to not fiddle with sys.path.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9389
diff changeset
21 from eric7 import Globals
9323
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 class ProjectVenvConfigurationDialog(QDialog, Ui_ProjectVenvConfigurationDialog):
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 """
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 Class implementing a dialog to enter the configuration for the embedded
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 environment of the project.
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 """
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 def __init__(
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 self,
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 venvName="",
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 venvDirectory="",
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 venvInterpreter="",
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 execPath="",
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 parent=None,
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 ):
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 """
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 Constructor
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 @param venvName logical name of a virtual environment for editing
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 @type str
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 @param venvDirectory directory of the virtual environment
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 @type str
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 @param venvInterpreter Python interpreter of the virtual environment
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 @type str
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 @param execPath search path string to be prepended to the PATH
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 environment variable
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 @type str
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 @param parent reference to the parent widget (defaults to None)
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 @type QWidget (optional)
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 """
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 super().__init__(parent)
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 self.setupUi(self)
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 self.__venvName = venvName
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 self.pythonExecPicker.setMode(EricPathPickerModes.OPEN_FILE_MODE)
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 self.pythonExecPicker.setWindowTitle(self.tr("Python Interpreter"))
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 self.pythonExecPicker.setDefaultDirectory(venvDirectory)
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 self.execPathEdit.setToolTip(
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 self.tr(
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 "Enter the executable search path to be prepended to the PATH"
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 " environment variable. Use '{0}' as the separator."
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 ).format(os.pathsep)
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 )
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 self.nameEdit.setText(venvName)
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 self.execPathEdit.setText(execPath)
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 if venvDirectory:
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 # try to determine a Python interpreter name
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 if Globals.isWindowsPlatform():
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 candidates = glob.glob(
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 os.path.join(venvDirectory, "Scripts", "python*.exe")
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 ) + glob.glob(os.path.join(venvDirectory, "python*.exe"))
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 else:
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 candidates = glob.glob(os.path.join(venvDirectory, "bin", "python*"))
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 self.pythonExecPicker.addItems(sorted(candidates))
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 if venvInterpreter:
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 self.pythonExecPicker.setText(venvInterpreter)
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 else:
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 self.pythonExecPicker.setText(venvDirectory)
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86
9389
7b2344009d7a Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9323
diff changeset
87 self.__updateOK()
7b2344009d7a Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9323
diff changeset
88
9323
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 @pyqtSlot(str)
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 def __updateOK(self):
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 """
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 Private method to update the enabled status of the OK button.
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 """
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 interpreterPath = self.pythonExecPicker.text()
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 self.buttonBox.button(QDialogButtonBox.StandardButton.Ok).setEnabled(
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 bool(interpreterPath)
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 and os.path.isfile(interpreterPath)
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 and os.access(interpreterPath, os.X_OK)
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 )
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 @pyqtSlot(str)
9389
7b2344009d7a Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9323
diff changeset
102 def on_pythonExecPicker_editTextChanged(self, txt):
9323
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 """
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 Private slot to handle changes of the entered Python interpreter path.
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 @param txt entered Python interpreter path
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 @type str
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 """
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 self.__updateOK()
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 def getData(self):
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 """
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 Public method to get the entered data.
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 @return tuple containing the path of the selected Python interpreter and
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 a string to be prepended to the PATH environment variable
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 @rtype tuple of (str, str)
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 """
6ae7193558ac Project
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 return self.pythonExecPicker.text(), self.execPathEdit.text()

eric ide

mercurial