149 exes.append(exe) |
149 exes.append(exe) |
150 except (WindowsError, OSError): # __IGNORE_WARNING__ |
150 except (WindowsError, OSError): # __IGNORE_WARNING__ |
151 pass |
151 pass |
152 return exes |
152 return exes |
153 |
153 |
|
154 versionSuffixes = ["", "-32", "-64"] |
154 for minorVersion in minorVersions: |
155 for minorVersion in minorVersions: |
155 versionStr = '{0}.{1}'.format(majorVersion, minorVersion) |
156 for versionSuffix in versionSuffixes: |
156 exePaths = getExePath( |
157 versionStr = '{0}.{1}{2}'.format(majorVersion, minorVersion, |
157 winreg.HKEY_CURRENT_USER, |
158 versionSuffix) |
158 winreg.KEY_WOW64_32KEY | winreg.KEY_READ, versionStr) |
159 exePaths = getExePath( |
159 if exePaths: |
160 winreg.HKEY_CURRENT_USER, |
|
161 winreg.KEY_WOW64_32KEY | winreg.KEY_READ, versionStr) |
160 for exePath in exePaths: |
162 for exePath in exePaths: |
161 executables.add(exePath) |
163 executables.add(exePath) |
162 |
164 |
163 exePaths = getExePath( |
165 exePaths = getExePath( |
164 winreg.HKEY_LOCAL_MACHINE, |
166 winreg.HKEY_LOCAL_MACHINE, |
165 winreg.KEY_WOW64_32KEY | winreg.KEY_READ, versionStr) |
167 winreg.KEY_WOW64_32KEY | winreg.KEY_READ, versionStr) |
166 if exePaths: |
|
167 for exePath in exePaths: |
168 for exePath in exePaths: |
168 executables.add(exePath) |
169 executables.add(exePath) |
169 |
170 |
170 # Even on Intel 64-bit machines it's 'AMD64' |
171 # Even on Intel 64-bit machines it's 'AMD64' |
171 if platform.machine() == 'AMD64': |
172 if platform.machine() == 'AMD64': |
172 exePaths = getExePath( |
173 exePaths = getExePath( |
173 winreg.HKEY_CURRENT_USER, |
174 winreg.HKEY_CURRENT_USER, |
174 winreg.KEY_WOW64_64KEY | winreg.KEY_READ, versionStr) |
175 winreg.KEY_WOW64_64KEY | winreg.KEY_READ, versionStr) |
175 if exePaths: |
|
176 for exePath in exePaths: |
176 for exePath in exePaths: |
177 executables.add(exePath) |
177 executables.add(exePath) |
178 |
178 |
179 exePath = getExePath( |
179 exePath = getExePath( |
180 winreg.HKEY_LOCAL_MACHINE, |
180 winreg.HKEY_LOCAL_MACHINE, |
181 winreg.KEY_WOW64_64KEY | winreg.KEY_READ, versionStr) |
181 winreg.KEY_WOW64_64KEY | winreg.KEY_READ, versionStr) |
182 if exePaths: |
|
183 for exePath in exePaths: |
182 for exePath in exePaths: |
184 executables.add(exePath) |
183 executables.add(exePath) |
185 else: |
184 else: |
186 # |
185 # |
187 # Linux, Unix ... |
186 # Linux, Unix ... |
210 exe = os.path.join(directory, pipScript + suffix) |
209 exe = os.path.join(directory, pipScript + suffix) |
211 if os.access(exe, os.X_OK): |
210 if os.access(exe, os.X_OK): |
212 exes.append(exe) |
211 exes.append(exe) |
213 |
212 |
214 # step 2: determine the Python variant |
213 # step 2: determine the Python variant |
215 if Utilities.isMacPlatform(): |
|
216 checkStrings = ["Python.framework/Versions/3".lower(), |
|
217 "python3"] |
|
218 else: |
|
219 checkStrings = ["python3"] |
|
220 |
|
221 _exePy2 = set() |
214 _exePy2 = set() |
222 _exePy3 = set() |
215 _exePy3 = set() |
|
216 versionArgs = ["-c", "import sys; print(sys.version_info[0])"] |
223 for exe in exes: |
217 for exe in exes: |
224 try: |
218 try: |
225 f = open(exe, "r") |
219 f = open(exe, "r") |
226 line0 = f.readline() |
220 line0 = f.readline() |
227 for checkStr in checkStrings: |
221 program = line0.replace("#!", "").strip() |
228 if checkStr in line0.lower(): |
222 process = QProcess() |
229 _exePy3.add(exe) |
223 process.start(program, versionArgs) |
230 break |
224 process.waitForFinished(5000) |
|
225 # get a QByteArray of the output |
|
226 versionBytes = process.readAllStandardOutput() |
|
227 versionStr = str(versionBytes, encoding='utf-8').strip() |
|
228 if versionStr == "3": |
|
229 _exePy3.add(exe) |
231 else: |
230 else: |
232 _exePy2.add(exe) |
231 _exePy2.add(exe) |
233 finally: |
232 finally: |
234 f.close() |
233 f.close() |
235 |
234 |