コード例 #1
0
 def LoadPythonInterpreters(self):
     if sysutils.isWindows():
         import _winreg
         ROOT_KEY_LIST = [
             _winreg.HKEY_LOCAL_MACHINE, _winreg.HKEY_CURRENT_USER
         ]
         ROOT_KEY_NAMES = ['LOCAL_MACHINE', 'CURRENT_USER']
         for k, root_key in enumerate(ROOT_KEY_LIST):
             try:
                 open_key = _winreg.OpenKey(root_key,
                                            r"SOFTWARE\Python\Pythoncore")
                 countkey = _winreg.QueryInfoKey(open_key)[0]
                 keylist = []
                 for i in range(int(countkey)):
                     name = _winreg.EnumKey(open_key, i)
                     try:
                         child_key = _winreg.OpenKey(
                             root_key,
                             r"SOFTWARE\Python\Pythoncore\%s" % name)
                         install_path = _winreg.QueryValue(
                             child_key, "InstallPath")
                         interpreter = Interpreter.PythonInterpreter(
                             name,
                             os.path.join(
                                 install_path, Interpreter.
                                 PythonInterpreter.CONSOLE_EXECUTABLE_NAME))
                         if not interpreter.IsValidInterpreter:
                             app_debugLogger.error(
                                 "interpreter name %s path %s,version %s is not a valid interpreter",
                                 interpreter.Name, interpreter.Path,
                                 interpreter.Version)
                             continue
                         self.interpreters.insert(0, interpreter)
                         app_debugLogger.info(
                             "load python interpreter from regkey success,path is %s,version is %s",
                             interpreter.Path, interpreter.Version)
                         help_key = _winreg.OpenKey(child_key, "Help")
                         help_path = _winreg.QueryValue(
                             help_key, "Main Python Documentation")
                         interpreter.HelpPath = help_path
                         app_debugLogger.info(
                             "interpreter %s,help path is %s",
                             interpreter.Name, interpreter.HelpPath)
                     except Exception as e:
                         app_debugLogger.error(
                             "read python child regkey %s\\xxx\\%s error:%s",
                             ROOT_KEY_NAMES[k], name, e)
                         continue
             except Exception as e:
                 app_debugLogger.error(
                     "load python interpreter from regkey %s error:%s",
                     ROOT_KEY_NAMES[k], e)
                 continue
     else:
         executable_path = sys.executable
         install_path = os.path.dirname(executable_path)
         interpreter = Interpreter.PythonInterpreter(
             "default", executable_path)
         self.interpreters.append(interpreter)
コード例 #2
0
 def AddPythonInterpreter(self, interpreter_path, name):
     interpreter = Interpreter.PythonInterpreter(name, interpreter_path)
     if not interpreter.IsValidInterpreter:
         raise InterpreterAddError(
             _("%s is not a valid interpreter path") % interpreter_path)
     interpreter.Name = name
     if self.CheckInterpreterExist(interpreter):
         raise InterpreterAddError(_("interpreter have already exist"))
     self.interpreters.append(interpreter)
     #first interpreter should be the default interpreter by default
     if 1 == len(self.interpreters):
         self.MakeDefaultInterpreter()
         self.SetCurrentInterpreter(self.DefaultInterpreter)
     return interpreter
コード例 #3
0
    def LoadPythonInterpretersFromConfig(self):
        config = wx.ConfigBase_Get()
        if sysutils.isWindows():
            data = config.Read(self.KEY_PREFIX)
            if not data:
                return False
            has_builtin_interpreter = False
            lst = pickle.loads(data.encode('ascii'))
            for l in lst:
                is_builtin = l.get('is_builtin', False)
                if is_builtin:
                    interpreter = Interpreter.BuiltinPythonInterpreter(
                        l['name'], l['path'], l['id'])
                    has_builtin_interpreter = True
                else:
                    interpreter = Interpreter.PythonInterpreter(
                        l['name'], l['path'], l['id'], True)
                interpreter.Default = l['default']
                if interpreter.Default:
                    self.SetDefaultInterpreter(interpreter)
                data = {
                    'version': l['version'],
                    'builtins': l['builtins'],
                    #'path_list' is the old key name of sys_path_list,we should make compatible of old version
                    'sys_path_list': l.get('sys_path_list',
                                           l.get('path_list')),
                    'python_path_list': l.get('python_path_list', []),
                    'is_builtin': is_builtin
                }
                interpreter.SetInterpreter(**data)
                interpreter.HelpPath = l.get('help_path', '')
                interpreter.Environ.SetEnviron(l.get('environ', {}))
                interpreter.Packages = l.get('packages', {})
                self.interpreters.append(interpreter)
                app_debugLogger.info('load python interpreter from app config success,name is %s,path is %s,version is %s,is builtin %s',\
                                     interpreter.Name,interpreter.Path,interpreter.Version,interpreter.IsBuiltIn)
            if len(self.interpreters) > 1 or (len(self.interpreters) == 1
                                              and not has_builtin_interpreter):
                return True
        else:
            prefix = self.KEY_PREFIX
            data = config.Read(prefix)
            if not data:
                return False
            ids = data.split(os.pathsep)
            for id in ids:
                name = config.Read("%s/%s/Name" % (prefix, id))
                path = config.Read("%s/%s/Path" % (prefix, id))
                is_default = config.ReadInt("%s/%s/Default" % (prefix, id))
                version = config.Read("%s/%s/Version" % (prefix, id))
                sys_paths = config.Read("%s/%s/SysPathList" % (prefix, id))
                python_path_list = config.Read(
                    "%s/%s/PythonPathList" % (prefix, id), "")
                builtins = config.Read("%s/%s/Builtins" % (prefix, id))
                environ = json.loads(
                    config.Read("%s/%s/Environ" % (prefix, id), "{}"))
                packages = json.loads(
                    config.Read("%s/%s/Packages" % (prefix, id), "{}"))
                interpreter = Interpreter.PythonInterpreter(
                    name, path, id, True)
                interpreter.Default = is_default
                interpreter.Environ.SetEnviron(environ)
                interpreter.Packages = packages
                if interpreter.Default:
                    self.SetDefaultInterpreter(interpreter)
                data = {
                    'version': version,
                    'builtins': builtins.split(os.pathsep),
                    'sys_path_list': sys_paths.split(os.pathsep),
                    'python_path_list': python_path_list.split(os.pathsep)
                }
                interpreter.SetInterpreter(**data)
                self.interpreters.append(interpreter)
            if len(self.interpreters) > 0:
                return True

        return False