--- a/Plugins/PluginPipInterface.py Sat Jan 20 16:26:30 2018 +0100 +++ b/Plugins/PluginPipInterface.py Sun Jan 21 12:32:31 2018 +0100 @@ -12,7 +12,7 @@ import os import platform -from PyQt5.QtCore import pyqtSignal, QObject, QCoreApplication +from PyQt5.QtCore import pyqtSignal, QObject, QCoreApplication, QProcess from E5Gui.E5Application import e5App @@ -151,35 +151,34 @@ pass return exes + versionSuffixes = ["", "-32", "-64"] for minorVersion in minorVersions: - versionStr = '{0}.{1}'.format(majorVersion, minorVersion) - exePaths = getExePath( - winreg.HKEY_CURRENT_USER, - winreg.KEY_WOW64_32KEY | winreg.KEY_READ, versionStr) - if exePaths: - for exePath in exePaths: - executables.add(exePath) - - exePaths = getExePath( - winreg.HKEY_LOCAL_MACHINE, - winreg.KEY_WOW64_32KEY | winreg.KEY_READ, versionStr) - if exePaths: + for versionSuffix in versionSuffixes: + versionStr = '{0}.{1}{2}'.format(majorVersion, minorVersion, + versionSuffix) + exePaths = getExePath( + winreg.HKEY_CURRENT_USER, + winreg.KEY_WOW64_32KEY | winreg.KEY_READ, versionStr) for exePath in exePaths: executables.add(exePath) - - # Even on Intel 64-bit machines it's 'AMD64' - if platform.machine() == 'AMD64': + exePaths = getExePath( - winreg.HKEY_CURRENT_USER, - winreg.KEY_WOW64_64KEY | winreg.KEY_READ, versionStr) - if exePaths: + winreg.HKEY_LOCAL_MACHINE, + winreg.KEY_WOW64_32KEY | winreg.KEY_READ, versionStr) + for exePath in exePaths: + executables.add(exePath) + + # Even on Intel 64-bit machines it's 'AMD64' + if platform.machine() == 'AMD64': + exePaths = getExePath( + winreg.HKEY_CURRENT_USER, + winreg.KEY_WOW64_64KEY | winreg.KEY_READ, versionStr) for exePath in exePaths: executables.add(exePath) - - exePath = getExePath( - winreg.HKEY_LOCAL_MACHINE, - winreg.KEY_WOW64_64KEY | winreg.KEY_READ, versionStr) - if exePaths: + + exePath = getExePath( + winreg.HKEY_LOCAL_MACHINE, + winreg.KEY_WOW64_64KEY | winreg.KEY_READ, versionStr) for exePath in exePaths: executables.add(exePath) else: @@ -212,22 +211,22 @@ exes.append(exe) # step 2: determine the Python variant - if Utilities.isMacPlatform(): - checkStrings = ["Python.framework/Versions/3".lower(), - "python3"] - else: - checkStrings = ["python3"] - _exePy2 = set() _exePy3 = set() + versionArgs = ["-c", "import sys; print(sys.version_info[0])"] for exe in exes: try: f = open(exe, "r") line0 = f.readline() - for checkStr in checkStrings: - if checkStr in line0.lower(): - _exePy3.add(exe) - break + program = line0.replace("#!", "").strip() + process = QProcess() + process.start(program, versionArgs) + process.waitForFinished(5000) + # get a QByteArray of the output + versionBytes = process.readAllStandardOutput() + versionStr = str(versionBytes, encoding='utf-8').strip() + if versionStr == "3": + _exePy3.add(exe) else: _exePy2.add(exe) finally: