src/eric7/SystemUtilities/PythonUtilities.py

Sat, 26 Apr 2025 12:34:32 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 26 Apr 2025 12:34:32 +0200
branch
eric7
changeset 11240
c48c615c04a3
parent 11148
15e30f0c76a8
permissions
-rw-r--r--

MicroPython
- Added a configuration option to disable the support for the no longer produced Pimoroni Pico Wireless Pack.

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
11090
f5f5f5803935 Updated copyright for 2025.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10836
diff changeset
3 # Copyright (c) 2022 - 2025 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
24300d16a154 General
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9905
diff changeset
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
10431
64157aeb0312 Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
58 @return path to the Python library
64157aeb0312 Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
59 @rtype str
9624
b47dfa7a137d Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 """
b47dfa7a137d Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 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
62
b47dfa7a137d Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63
b47dfa7a137d Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 def getPythonVersion():
b47dfa7a137d Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 """
b47dfa7a137d Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 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
67
10431
64157aeb0312 Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
68 @return integer representing major and minor version number
64157aeb0312 Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
69 @rtype int
9624
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 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
72
b47dfa7a137d Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73
10836
dc7f25f2f7e4 Refactored some code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10834
diff changeset
74 def isPythonSource(filename, source, editor=None):
9624
b47dfa7a137d Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 """
10836
dc7f25f2f7e4 Refactored some code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10834
diff changeset
76 Function to check for a Python source code file.
9624
b47dfa7a137d Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77
10431
64157aeb0312 Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
78 @param filename name of the file with extension
64157aeb0312 Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
79 @type str
64157aeb0312 Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
80 @param source of the file
64157aeb0312 Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
81 @type str
64157aeb0312 Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10359
diff changeset
82 @param editor reference to the editor, if the file is opened already
10836
dc7f25f2f7e4 Refactored some code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10834
diff changeset
83 (defaults to None)
dc7f25f2f7e4 Refactored some code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10834
diff changeset
84 @type Editor (optional)
dc7f25f2f7e4 Refactored some code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10834
diff changeset
85 @return flag indicating Python source code
dc7f25f2f7e4 Refactored some code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10834
diff changeset
86 @rtype bool
9624
b47dfa7a137d Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 """
b47dfa7a137d Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 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
89 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
90
10836
dc7f25f2f7e4 Refactored some code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10834
diff changeset
91 pythonEquivalents = ("Cython", "MicroPython", "Python3")
9624
b47dfa7a137d Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92
b47dfa7a137d Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 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
94 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
95 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
96
b47dfa7a137d Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 # Maybe the user has changed the language
10836
dc7f25f2f7e4 Refactored some code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10834
diff changeset
98 if editor and editor.getFileType() in pythonEquivalents:
dc7f25f2f7e4 Refactored some code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10834
diff changeset
99 return True
9624
b47dfa7a137d Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100
b47dfa7a137d Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 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
102 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
103 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
104 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
105 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
106 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
107 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
108 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
109
10836
dc7f25f2f7e4 Refactored some code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10834
diff changeset
110 if "FileType" in flags and flags["FileType"] in pythonEquivalents:
dc7f25f2f7e4 Refactored some code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10834
diff changeset
111 return True
9624
b47dfa7a137d Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 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
113 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
114 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
115 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
116 if language == "Python3":
10836
dc7f25f2f7e4 Refactored some code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10834
diff changeset
117 return True
9624
b47dfa7a137d Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118
10836
dc7f25f2f7e4 Refactored some code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10834
diff changeset
119 if (
9624
b47dfa7a137d Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 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
121 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
122 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
123 and ext in py3Ext
10836
dc7f25f2f7e4 Refactored some code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10834
diff changeset
124 and project.getProjectLanguage() in pythonEquivalents
9624
b47dfa7a137d Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 ):
10836
dc7f25f2f7e4 Refactored some code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10834
diff changeset
126 return True
9624
b47dfa7a137d Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 elif ext in py3Ext:
10836
dc7f25f2f7e4 Refactored some code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10834
diff changeset
128 return True
9624
b47dfa7a137d Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 elif source:
b47dfa7a137d Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 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
131 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
132 else:
b47dfa7a137d Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133 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
134 if line0.startswith("#!") and (("python3" in line0) or ("python" in line0)):
10836
dc7f25f2f7e4 Refactored some code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10834
diff changeset
135 return True
9624
b47dfa7a137d Refactored the Utilities and Globals modules in order to enhance the maintainability.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136
10836
dc7f25f2f7e4 Refactored some code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10834
diff changeset
137 return False
10351
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
138
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
139
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
140 def searchInterpreters(environments=None):
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
141 """
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
142 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
143 executable search path (i.e. PATH) (Windows variant).
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
144
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
145 @param environments list of environment directories to scan for Python interpreters
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
146 (defaults to None)
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
147 @type list of str (optional)
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
148 @return list of found interpreter executables
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
149 @rtype list of str
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
150 """
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
151 if isWindowsPlatform():
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
152 return __searchInterpreters_Windows(environments=environments)
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
153 else:
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
154 return __searchInterpreters_Linux(environments=environments)
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
155
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
156
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
157 def __searchInterpreters_Windows(environments=None):
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
158 """
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
159 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
160 executable search path (i.e. PATH) (Windows variant).
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
161
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
162 @param environments list of environment directories to scan for Python interpreters
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
163 (defaults to None)
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
164 @type list of str (optional)
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
165 @return list of found interpreter executables
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
166 @rtype list of str
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
167 """
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
168 try:
11148
15e30f0c76a8 Adjusted the code to the modified issue codes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
169 import winreg # noqa: I-101, I-103
10351
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
170 except ImportError:
11148
15e30f0c76a8 Adjusted the code to the modified issue codes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
171 import _winreg as winreg # noqa: I-101, I-102
10351
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
172
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
173 def getExePath(branch, access, versionStr):
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
174 with contextlib.suppress(WindowsError, OSError):
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
175 software = winreg.OpenKey(branch, "Software", 0, access)
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
176 python = winreg.OpenKey(software, "Python", 0, access)
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
177 pcore = winreg.OpenKey(python, "PythonCore", 0, access)
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
178 version = winreg.OpenKey(pcore, versionStr, 0, access)
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
179 installpath = winreg.QueryValue(version, "InstallPath")
10359
de0420dac60e Corrected some code formatting and style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10351
diff changeset
180 exe = os.path.join(installpath, "python.exe")
10351
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
181 if os.access(exe, os.X_OK):
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
182 return exe
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
183
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
184 return None
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
185
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
186 minorVersions = range(8, 16) # Py 3.8 until Py 3.15
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
187 interpreters = set()
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
188
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
189 if environments:
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
190 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
191 exe = os.path.join(directory, "python.exe")
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
192 if os.access(exe, os.X_OK):
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
193 interpreters.add(exe)
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
194
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
195 else:
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
196 versionSuffixes = ["", "-32", "-64"]
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
197 for minorVersion in minorVersions:
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
198 for versionSuffix in versionSuffixes:
10359
de0420dac60e Corrected some code formatting and style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10351
diff changeset
199 versionStr = "{0}.{1}{2}".format("3", minorVersion, versionSuffix)
10351
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
200 exePath = getExePath(
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
201 winreg.HKEY_CURRENT_USER,
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
202 winreg.KEY_WOW64_32KEY | winreg.KEY_READ,
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
203 versionStr,
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
204 )
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
205 if exePath:
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
206 interpreters.add(exePath)
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
207
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
208 exePath = getExePath(
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
209 winreg.HKEY_LOCAL_MACHINE,
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
210 winreg.KEY_WOW64_32KEY | winreg.KEY_READ,
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
211 versionStr,
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
212 )
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
213 if exePath:
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
214 interpreters.add(exePath)
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
215
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
216 # Even on Intel 64-bit machines it's 'AMD64'
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
217 if platform.machine() == "AMD64":
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
218 exePath = getExePath(
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
219 winreg.HKEY_CURRENT_USER,
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
220 winreg.KEY_WOW64_64KEY | winreg.KEY_READ,
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
221 versionStr,
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
222 )
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
223 if exePath:
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
224 interpreters.add(exePath)
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
225
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
226 exePath = getExePath(
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
227 winreg.HKEY_LOCAL_MACHINE,
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
228 winreg.KEY_WOW64_64KEY | winreg.KEY_READ,
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
229 versionStr,
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
230 )
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
231 if exePath:
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
232 interpreters.add(exePath)
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
233
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
234 return list(interpreters)
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
235
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 def __searchInterpreters_Linux(environments=None):
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
238 """
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
239 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
240 executable search path (i.e. PATH) (non Windows variant).
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 @param environments list of environment directories to scan for Python interpreters
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
243 (defaults to None)
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
244 @type list of str (optional)
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
245 @return list of found interpreter executables
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
246 @rtype list of str
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 from eric7.SystemUtilities import OSUtilities
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
249
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
250 minorVersions = range(8, 16) # Py 3.8 until Py 3.15
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
251 interpreters = []
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
252
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
253 if environments:
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
254 directories = [os.path.join(d, "bin") for d in environments]
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
255 else:
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
256 searchpath = OSUtilities.getEnvironmentEntry("PATH")
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
257 directories = searchpath.split(os.pathsep) if searchpath else []
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 directories:
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
260 pythonNames = ["python3.{0}".format(v) for v in minorVersions]
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
261 for directory in directories:
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
262 for interpreter in pythonNames:
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
263 exe = os.path.join(directory, interpreter)
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
264 if os.access(exe, os.X_OK):
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
265 interpreters.append(exe)
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
266
1f9bafeff96c Virtual Environments
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10334
diff changeset
267 return interpreters

eric ide

mercurial