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 |
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 |