Wed, 29 Nov 2023 14:27:25 +0100
Virtual Environments
- Added the capability to search for unregistered Python interpreters in order to create an environment entry for those selected by the user.
9624
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1 | # -*- coding: utf-8 -*- |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
2 | |
9653
e67609152c5e
Updated copyright for 2023.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9624
diff
changeset
|
3 | # Copyright (c) 2022 - 2023 Detlev Offenbach <detlev@die-offenbachs.de> |
9624
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
4 | # |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
5 | |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
6 | """ |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
7 | Module implementing Python related utility functions. |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
8 | """ |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
9 | |
10351
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
10 | import contextlib |
9624
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
11 | import os |
10351
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
12 | import platform |
9624
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
13 | import sys |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
14 | import sysconfig |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
15 | |
10351
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
16 | from .OSUtilities import isWindowsPlatform |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
17 | |
9624
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
18 | |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
19 | def getPythonExecutable(): |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
20 | """ |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
21 | Function to determine the path of the (non-windowed) Python executable. |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
22 | |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
23 | @return path of the Python executable |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
24 | @rtype str |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
25 | """ |
10334 | 26 | if sys.platform.startswith(("linux", "freebsd")): |
9624
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
27 | return sys.executable |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
28 | elif sys.platform == "darwin": |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
29 | return sys.executable.replace("pythonw", "python") |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
30 | else: |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
31 | return sys.executable.replace("pythonw.exe", "python.exe") |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
32 | |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
33 | |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
34 | def getPythonLibraryDirectory(): |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
35 | """ |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
36 | Function to determine the path to Python's library directory. |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
37 | |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
38 | @return path to the Python library directory |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
39 | @rtype str |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
40 | """ |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
41 | return sysconfig.get_path("platlib") |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
42 | |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
43 | |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
44 | def getPythonScriptsDirectory(): |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
45 | """ |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
46 | Function to determine the path to Python's scripts directory. |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
47 | |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
48 | @return path to the Python scripts directory |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
49 | @rtype str |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
50 | """ |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
51 | return sysconfig.get_path("scripts") |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
52 | |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
53 | |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
54 | def getPythonLibPath(): |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
55 | """ |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
56 | Function to determine the path to Python's library. |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
57 | |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
58 | @return path to the Python library (string) |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
59 | """ |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
60 | return sysconfig.get_path("platstdlib") |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
61 | |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
62 | |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
63 | def getPythonVersion(): |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
64 | """ |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
65 | Function to get the Python version (major, minor) as an integer value. |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
66 | |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
67 | @return An integer representing major and minor version number (integer) |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
68 | """ |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
69 | return sys.hexversion >> 16 |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
70 | |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
71 | |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
72 | def determinePythonVersion(filename, source, editor=None): |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
73 | """ |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
74 | Function to determine the python version of a given file. |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
75 | |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
76 | @param filename name of the file with extension (str) |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
77 | @param source of the file (str) |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
78 | @param editor reference to the editor, if the file is opened |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
79 | already (Editor object) |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
80 | @return Python version if file is Python3 (int) |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
81 | """ |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
82 | from eric7 import Preferences, Utilities |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
83 | from eric7.EricWidgets.EricApplication import ericApp |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
84 | |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
85 | pyAssignment = { |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
86 | "Python3": 3, |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
87 | "MicroPython": 3, |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
88 | "Cython": 3, |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
89 | } |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
90 | |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
91 | if not editor: |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
92 | viewManager = ericApp().getObject("ViewManager") |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
93 | editor = viewManager.getOpenEditor(filename) |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
94 | |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
95 | # Maybe the user has changed the language |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
96 | if editor and editor.getFileType() in pyAssignment: |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
97 | return pyAssignment[editor.getFileType()] |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
98 | |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
99 | pyVer = 0 |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
100 | if filename: |
9905
189b7a23c3c6
Changed some code to let the editor determine the highlighter language for files loaded from a connected µPy device.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
101 | if not source and os.path.exists(filename): |
9624
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
102 | source = Utilities.readEncodedFile(filename)[0] |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
103 | flags = Utilities.extractFlags(source) |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
104 | ext = os.path.splitext(filename)[1] |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
105 | py3Ext = Preferences.getPython("Python3Extensions") |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
106 | project = ericApp().getObject("Project") |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
107 | basename = os.path.basename(filename) |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
108 | |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
109 | if "FileType" in flags: |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
110 | pyVer = pyAssignment.get(flags["FileType"], 0) |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
111 | elif project.isOpen() and project.isProjectFile(filename): |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
112 | language = project.getEditorLexerAssoc(basename) |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
113 | if not language: |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
114 | language = Preferences.getEditorLexerAssoc(basename) |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
115 | if language == "Python3": |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
116 | pyVer = pyAssignment[language] |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
117 | |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
118 | if pyVer: |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
119 | # Skip the next tests |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
120 | pass |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
121 | elif ( |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
122 | Preferences.getProject("DeterminePyFromProject") |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
123 | and project.isOpen() |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
124 | and project.isProjectFile(filename) |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
125 | and ext in py3Ext |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
126 | ): |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
127 | pyVer = pyAssignment.get(project.getProjectLanguage(), 0) |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
128 | elif ext in py3Ext: |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
129 | pyVer = 3 |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
130 | elif source: |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
131 | if isinstance(source, str): |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
132 | line0 = source.splitlines()[0] |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
133 | else: |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
134 | line0 = source[0] |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
135 | if line0.startswith("#!") and (("python3" in line0) or ("python" in line0)): |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
136 | pyVer = 3 |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
137 | |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
138 | if pyVer == 0 and ext in py3Ext: |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
139 | pyVer = 3 |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
140 | |
b47dfa7a137d
Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
141 | return pyVer |
10351
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
142 | |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
143 | |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
144 | def searchInterpreters(environments=None): |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
145 | """ |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
146 | Function to determine a list of all Python interpreters available via the |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
147 | executable search path (i.e. PATH) (Windows variant). |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
148 | |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
149 | @param environments list of environment directories to scan for Python interpreters |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
150 | (defaults to None) |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
151 | @type list of str (optional) |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
152 | @return list of found interpreter executables |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
153 | @rtype list of str |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
154 | """ |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
155 | if isWindowsPlatform(): |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
156 | return __searchInterpreters_Windows(environments=environments) |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
157 | else: |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
158 | return __searchInterpreters_Linux(environments=environments) |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
159 | |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
160 | |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
161 | def __searchInterpreters_Windows(environments=None): |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
162 | """ |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
163 | Function to determine a list of all Python interpreters available via the |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
164 | executable search path (i.e. PATH) (Windows variant). |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
165 | |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
166 | @param environments list of environment directories to scan for Python interpreters |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
167 | (defaults to None) |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
168 | @type list of str (optional) |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
169 | @return list of found interpreter executables |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
170 | @rtype list of str |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
171 | """ |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
172 | try: |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
173 | import winreg |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
174 | except ImportError: |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
175 | import _winreg as winreg # __IGNORE_WARNING__ |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
176 | |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
177 | def getExePath(branch, access, versionStr): |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
178 | with contextlib.suppress(WindowsError, OSError): |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
179 | software = winreg.OpenKey(branch, "Software", 0, access) |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
180 | python = winreg.OpenKey(software, "Python", 0, access) |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
181 | pcore = winreg.OpenKey(python, "PythonCore", 0, access) |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
182 | version = winreg.OpenKey(pcore, versionStr, 0, access) |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
183 | installpath = winreg.QueryValue(version, "InstallPath") |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
184 | exe = os.path.join(installpath, "python.exe") |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
185 | if os.access(exe, os.X_OK): |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
186 | return exe |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
187 | |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
188 | return None |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
189 | |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
190 | minorVersions = range(8, 16) # Py 3.8 until Py 3.15 |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
191 | interpreters = set() |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
192 | |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
193 | if environments: |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
194 | for directory in [os.path.join(d, "Scripts") for d in environments]: |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
195 | exe = os.path.join(directory, "python.exe") |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
196 | if os.access(exe, os.X_OK): |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
197 | interpreters.add(exe) |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
198 | |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
199 | else: |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
200 | versionSuffixes = ["", "-32", "-64"] |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
201 | for minorVersion in minorVersions: |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
202 | for versionSuffix in versionSuffixes: |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
203 | versionStr = "{0}.{1}{2}".format( |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
204 | "3", minorVersion, versionSuffix |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
205 | ) |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
206 | exePath = getExePath( |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
207 | winreg.HKEY_CURRENT_USER, |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
208 | winreg.KEY_WOW64_32KEY | winreg.KEY_READ, |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
209 | versionStr, |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
210 | ) |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
211 | if exePath: |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
212 | interpreters.add(exePath) |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
213 | |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
214 | exePath = getExePath( |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
215 | winreg.HKEY_LOCAL_MACHINE, |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
216 | winreg.KEY_WOW64_32KEY | winreg.KEY_READ, |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
217 | versionStr, |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
218 | ) |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
219 | if exePath: |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
220 | interpreters.add(exePath) |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
221 | |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
222 | # Even on Intel 64-bit machines it's 'AMD64' |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
223 | if platform.machine() == "AMD64": |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
224 | exePath = getExePath( |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
225 | winreg.HKEY_CURRENT_USER, |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
226 | winreg.KEY_WOW64_64KEY | winreg.KEY_READ, |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
227 | versionStr, |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
228 | ) |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
229 | if exePath: |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
230 | interpreters.add(exePath) |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
231 | |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
232 | exePath = getExePath( |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
233 | winreg.HKEY_LOCAL_MACHINE, |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
234 | winreg.KEY_WOW64_64KEY | winreg.KEY_READ, |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
235 | versionStr, |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
236 | ) |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
237 | if exePath: |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
238 | interpreters.add(exePath) |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
239 | |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
240 | return list(interpreters) |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
241 | |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
242 | |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
243 | def __searchInterpreters_Linux(environments=None): |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
244 | """ |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
245 | Function to determine a list of all Python interpreters available via the |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
246 | executable search path (i.e. PATH) (non Windows variant). |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
247 | |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
248 | @param environments list of environment directories to scan for Python interpreters |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
249 | (defaults to None) |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
250 | @type list of str (optional) |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
251 | @return list of found interpreter executables |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
252 | @rtype list of str |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
253 | """ |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
254 | from eric7.SystemUtilities import OSUtilities |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
255 | |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
256 | minorVersions = range(8, 16) # Py 3.8 until Py 3.15 |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
257 | interpreters = [] |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
258 | |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
259 | if environments: |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
260 | directories = [os.path.join(d, "bin") for d in environments] |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
261 | else: |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
262 | searchpath = OSUtilities.getEnvironmentEntry("PATH") |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
263 | directories = searchpath.split(os.pathsep) if searchpath else [] |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
264 | |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
265 | if directories: |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
266 | pythonNames = ["python3.{0}".format(v) for v in minorVersions] |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
267 | for directory in directories: |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
268 | for interpreter in pythonNames: |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
269 | exe = os.path.join(directory, interpreter) |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
270 | if os.access(exe, os.X_OK): |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
271 | interpreters.append(exe) |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
272 | |
1f9bafeff96c
Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10334
diff
changeset
|
273 | return interpreters |