docs: def upgrade(self, dependencies=False, prerelease=False, force=False):
          """
          Upgrade the package unconditionaly
          Args:
              dependencies: update package dependencies if True (see pip --no-deps)
              prerelease: update to pre-release and development versions
              force: reinstall all packages even if they are already up-to-date
          Returns True if pip was sucessful
          """
          pip_args = ['install', self.pkg]
  
          found = self._get_current() != (-1)
          if found:
              pip_args.append("--upgrade")
  
          if force:
              pip_args.append(
                  "--force-reinstall" if found else "--ignore-installed")
  
          if not dependencies:
              pip_args.append("--no-deps")
  
          if prerelease:
              pip_args.append("--pre")
  
          proxy = os.environ.get('http_proxy')
          if proxy:
              pip_args.extend(['--proxy', proxy])
  
          if self.__index:
              pip_args.extend(['-i', self.index])
  
          try:
              ecode = pip.main(args=pip_args)
          except TypeError:
              # pip changed in 0.6.0 from initial_args to args, this is for backwards compatibility
              # can be removed when pip 0.5 is no longer in use at all (approx.
              # year 2025)
              ecode = pip.main(initial_args=pip_args)
  
          if ecode != 0:
              raise PIPError(ecode)