PluginCxFreeze.py

changeset 108
13fb1d9e7049
parent 106
3bd158b161f1
child 113
696a9105939d
equal deleted inserted replaced
107:ad65a49aa7f7 108:13fb1d9e7049
10 from __future__ import unicode_literals 10 from __future__ import unicode_literals
11 11
12 import os 12 import os
13 import platform 13 import platform
14 14
15 from PyQt5.QtCore import QObject, QTranslator, QCoreApplication 15 from PyQt5.QtCore import QObject, QTranslator, QCoreApplication, QProcess
16 from PyQt5.QtWidgets import QDialog 16 from PyQt5.QtWidgets import QDialog
17 17
18 from E5Gui import E5MessageBox 18 from E5Gui import E5MessageBox
19 from E5Gui.E5Action import E5Action 19 from E5Gui.E5Action import E5Action
20 from E5Gui.E5Application import e5App 20 from E5Gui.E5Application import e5App
24 # Start-of-Header 24 # Start-of-Header
25 name = "CxFreeze Plugin" 25 name = "CxFreeze Plugin"
26 author = "Detlev Offenbach <detlev@die-offenbachs.de>" 26 author = "Detlev Offenbach <detlev@die-offenbachs.de>"
27 autoactivate = True 27 autoactivate = True
28 deactivateable = True 28 deactivateable = True
29 version = "6.0.8" 29 version = "6.0.9"
30 className = "CxFreezePlugin" 30 className = "CxFreezePlugin"
31 packageName = "CxFreeze" 31 packageName = "CxFreeze"
32 shortDescription = "Show the CxFreeze dialogs." 32 shortDescription = "Show the CxFreeze dialogs."
33 longDescription = \ 33 longDescription = \
34 """This plugin implements the CxFreeze dialogs.""" \ 34 """This plugin implements the CxFreeze dialogs.""" \
111 return exe 111 return exe
112 except WindowsError: # __IGNORE_WARNING__ 112 except WindowsError: # __IGNORE_WARNING__
113 return None 113 return None
114 return None 114 return None
115 115
116 versionSuffixes = ["", "-32", "-64"]
116 for minorVersion in minorVersions: 117 for minorVersion in minorVersions:
117 versionStr = '{0}.{1}'.format(majorVersion, minorVersion) 118 for versionSuffix in versionSuffixes:
118 exePath = getExePath( 119 versionStr = '{0}.{1}{2}'.format(majorVersion, minorVersion,
119 winreg.HKEY_CURRENT_USER, 120 versionSuffix)
120 winreg.KEY_WOW64_32KEY | winreg.KEY_READ, versionStr)
121 if exePath is not None:
122 executables.add(exePath)
123
124 exePath = getExePath(
125 winreg.HKEY_LOCAL_MACHINE,
126 winreg.KEY_WOW64_32KEY | winreg.KEY_READ, versionStr)
127 if exePath is not None:
128 executables.add(exePath)
129
130 # Even on Intel 64-bit machines it's 'AMD64'
131 if platform.machine() == 'AMD64':
132 exePath = getExePath( 121 exePath = getExePath(
133 winreg.HKEY_CURRENT_USER, 122 winreg.HKEY_CURRENT_USER,
134 winreg.KEY_WOW64_64KEY | winreg.KEY_READ, versionStr) 123 winreg.KEY_WOW64_32KEY | winreg.KEY_READ, versionStr)
135 if exePath is not None: 124 if exePath is not None:
136 executables.add(exePath) 125 executables.add(exePath)
137 126
138 exePath = getExePath( 127 exePath = getExePath(
139 winreg.HKEY_LOCAL_MACHINE, 128 winreg.HKEY_LOCAL_MACHINE,
140 winreg.KEY_WOW64_64KEY | winreg.KEY_READ, versionStr) 129 winreg.KEY_WOW64_32KEY | winreg.KEY_READ, versionStr)
141 if exePath is not None: 130 if exePath is not None:
142 executables.add(exePath) 131 executables.add(exePath)
132
133 # Even on Intel 64-bit machines it's 'AMD64'
134 if platform.machine() == 'AMD64':
135 exePath = getExePath(
136 winreg.HKEY_CURRENT_USER,
137 winreg.KEY_WOW64_64KEY | winreg.KEY_READ, versionStr)
138 if exePath is not None:
139 executables.add(exePath)
140
141 exePath = getExePath(
142 winreg.HKEY_LOCAL_MACHINE,
143 winreg.KEY_WOW64_64KEY | winreg.KEY_READ, versionStr)
144 if exePath is not None:
145 executables.add(exePath)
143 else: 146 else:
144 # 147 #
145 # Linux, Unix ... 148 # Linux, Unix ...
146 cxfreezeScript = 'cxfreeze' 149 cxfreezeScript = 'cxfreeze'
147 scriptSuffixes = ["", "-python{0}".format(majorVersion)] 150 scriptSuffixes = ["", "-python{0}".format(majorVersion)]
163 exe = os.path.join(directory, cxfreezeScript + suffix) 166 exe = os.path.join(directory, cxfreezeScript + suffix)
164 if os.access(exe, os.X_OK): 167 if os.access(exe, os.X_OK):
165 exes.append(exe) 168 exes.append(exe)
166 169
167 # step 2: determine the Python variant 170 # step 2: determine the Python variant
168 if Utilities.isMacPlatform():
169 checkStrings = ["Python.framework/Versions/3".lower(),
170 "python3"]
171 else:
172 checkStrings = ["python3"]
173
174 _exePy2 = set() 171 _exePy2 = set()
175 _exePy3 = set() 172 _exePy3 = set()
173 versionArgs = ["-c", "import sys; print(sys.version_info[0])"]
176 for exe in exes: 174 for exe in exes:
177 try: 175 try:
178 f = open(exe, "r") 176 f = open(exe, "r")
179 line0 = f.readline() 177 line0 = f.readline()
180 for checkStr in checkStrings: 178 program = line0.replace("#!", "").strip()
181 if checkStr in line0.lower(): 179 process = QProcess()
182 _exePy3.add(exe) 180 process.start(program, versionArgs)
183 break 181 process.waitForFinished(5000)
184 else: 182 # get a QByteArray of the output
185 _exePy2.add(exe) 183 versionBytes = process.readAllStandardOutput()
184 versionStr = str(versionBytes, encoding='utf-8').strip()
185 if versionStr == "3":
186 _exePy3.add(exe)
187 elif versionStr == "2":
188 _exePy2.add(exe)
186 finally: 189 finally:
187 f.close() 190 f.close()
188 191
189 executables = _exePy3 if majorVersion == 3 else _exePy2 192 executables = _exePy3 if majorVersion == 3 else _exePy2
190 193

eric ide

mercurial