src/eric7/UI/upgrader.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 11090
f5f5f5803935
permissions
-rw-r--r--

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

8970
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 #!/usr/bin/env python3
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2 # -*- coding: utf-8 -*-
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3
11090
f5f5f5803935 Updated copyright for 2025.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
4 # Copyright (c) 2022 - 2025 Detlev Offenbach <detlev@die-offenbachs.de>
8970
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5 #
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 """
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 Script to upgrade the packages eric depends on.
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 This process must be performed while eric is closed. The script will upgrade
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 the requested packages and will restart eric.
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 """
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13
8994
3bebd76dc6ea Fine tuned the upgrader behavior and introduced a configurable delay to give eric sufficient time to exit before doing the upgrade.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8972
diff changeset
14 import contextlib
9324
7f7f3e47b238 Set some security considerations to 'ok'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
15 import subprocess # secok
8970
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16 import sys
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17 import time
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18
8972
54816b8f740f General
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8970
diff changeset
19 _pyqtPackages = [
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
20 "pyqt6",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
21 "pyqt6-sip",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
22 "pyqt6-webengine",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
23 "pyqt6-charts",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
24 "pyqt6-qscintilla",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
25 "pyqt6-qt6",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
26 "pyqt6-webengine-qt6",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
27 "pyqt6-charts-qt6",
8972
54816b8f740f General
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8970
diff changeset
28 ]
54816b8f740f General
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8970
diff changeset
29 _ericPackages = ["eric-ide"]
8970
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31
8972
54816b8f740f General
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8970
diff changeset
32 def doUpgrade(packages):
8970
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 """
8972
54816b8f740f General
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8970
diff changeset
34 Function to upgrade the given packages via pip.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
35
8972
54816b8f740f General
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8970
diff changeset
36 @param packages list of packages to be upgraded
54816b8f740f General
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8970
diff changeset
37 @type list of str
8970
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 @return flag indicating a successful installation
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 @rtype bool
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
41 exitCode = subprocess.run( # secok
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
42 [sys.executable, "-m", "pip", "install", "--prefer-binary", "--upgrade"]
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
43 + packages
8970
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 ).returncode
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
45 ok = exitCode == 0
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
46
8970
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 return ok
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 def startEric(args):
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 """
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 Function to start eric with the given arguments.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
53
8970
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 @param args list containing the start arguments
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 @type list of str
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 """
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 args = [sys.executable] + args
9324
7f7f3e47b238 Set some security considerations to 'ok'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
58 subprocess.Popen(args) # secok
8970
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 def main():
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 """
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 Main entry point into the upgrader.
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 """
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 try:
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 ddindex = sys.argv.index("--")
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 except ValueError:
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 # '--' was not found. Start eric with all parameters given.
9015
dfeefad914ed Fixed some issues with the upgrader tool.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9001
diff changeset
69 ddindex = 0
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
70
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
71 ericStartArgs = sys.argv[ddindex + 1 :] if bool(ddindex) else []
8970
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 if not ericStartArgs:
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 # create default start arguments
8972
54816b8f740f General
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8970
diff changeset
74 ericStartArgs = ["-m", "eric7", "--start-session"]
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
75
9015
dfeefad914ed Fixed some issues with the upgrader tool.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9001
diff changeset
76 upgraderArgs = sys.argv[1:ddindex] if bool(ddindex) else sys.argv[:]
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
77
8994
3bebd76dc6ea Fine tuned the upgrader behavior and introduced a configurable delay to give eric sufficient time to exit before doing the upgrade.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8972
diff changeset
78 upgradeType = ""
3bebd76dc6ea Fine tuned the upgrader behavior and introduced a configurable delay to give eric sufficient time to exit before doing the upgrade.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8972
diff changeset
79 upgradeDelay = 2
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
80
8994
3bebd76dc6ea Fine tuned the upgrader behavior and introduced a configurable delay to give eric sufficient time to exit before doing the upgrade.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8972
diff changeset
81 for arg in upgraderArgs:
3bebd76dc6ea Fine tuned the upgrader behavior and introduced a configurable delay to give eric sufficient time to exit before doing the upgrade.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8972
diff changeset
82 if arg.startswith("--delay="):
3bebd76dc6ea Fine tuned the upgrader behavior and introduced a configurable delay to give eric sufficient time to exit before doing the upgrade.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8972
diff changeset
83 with contextlib.suppress(ValueError):
3bebd76dc6ea Fine tuned the upgrader behavior and introduced a configurable delay to give eric sufficient time to exit before doing the upgrade.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8972
diff changeset
84 upgradeDelay = int(arg.split("=")[1].strip())
3bebd76dc6ea Fine tuned the upgrader behavior and introduced a configurable delay to give eric sufficient time to exit before doing the upgrade.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8972
diff changeset
85 elif arg.startswith("--type="):
9001
a00cd6b55728 Corrected some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8994
diff changeset
86 upgradeType = arg.split("=")[1].strip()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
87
8994
3bebd76dc6ea Fine tuned the upgrader behavior and introduced a configurable delay to give eric sufficient time to exit before doing the upgrade.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8972
diff changeset
88 # wait a few seconds to give eric the chance to fully shut down
3bebd76dc6ea Fine tuned the upgrader behavior and introduced a configurable delay to give eric sufficient time to exit before doing the upgrade.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8972
diff changeset
89 time.sleep(upgradeDelay)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
90
8970
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 # now perform the upgrade and start eric, if it was successful
8994
3bebd76dc6ea Fine tuned the upgrader behavior and introduced a configurable delay to give eric sufficient time to exit before doing the upgrade.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8972
diff changeset
92 if upgradeType == "pyqt":
8972
54816b8f740f General
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8970
diff changeset
93 ok = doUpgrade(_pyqtPackages)
8994
3bebd76dc6ea Fine tuned the upgrader behavior and introduced a configurable delay to give eric sufficient time to exit before doing the upgrade.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8972
diff changeset
94 elif upgradeType == "eric":
8972
54816b8f740f General
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8970
diff changeset
95 ok = doUpgrade(_ericPackages)
8994
3bebd76dc6ea Fine tuned the upgrader behavior and introduced a configurable delay to give eric sufficient time to exit before doing the upgrade.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8972
diff changeset
96 elif upgradeType == "ericpyqt":
8972
54816b8f740f General
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8970
diff changeset
97 ok = doUpgrade(_ericPackages + _pyqtPackages)
8970
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 else:
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 ok = False
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
100
8970
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 if ok:
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 startEric(ericStartArgs)
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 sys.exit(0)
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 else:
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 sys.exit(1)
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
107
8970
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 if __name__ == "__main__":
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 main()

eric ide

mercurial