code: def sync(to_install, to_uninstall, verbose=False, dry_run=False, install_flags=None):
      
      if not to_uninstall and not to_install:
          click.echo("Everything up-to-date")
  
      pip_flags = []
      if not verbose:
          pip_flags += ['-q']
  
      if to_uninstall:
          if dry_run:
              click.echo("Would uninstall:")
              for pkg in to_uninstall:
                  click.echo("  {}".format(pkg))
          else:
              check_call([sys.executable, '-m', 'pip', 'uninstall', '-y'] + pip_flags + sorted(to_uninstall))
  
      if to_install:
          if install_flags is None:
              install_flags = []
          if dry_run:
              click.echo("Would install:")
              for ireq in to_install:
                  click.echo("  {}".format(format_requirement(ireq)))
          else:
              # prepare requirement lines
              req_lines = []
              for ireq in sorted(to_install, key=key_from_ireq):
                  ireq_hashes = get_hashes_from_ireq(ireq)
                  req_lines.append(format_requirement(ireq, hashes=ireq_hashes))
  
              # save requirement lines to a temporary file
              tmp_req_file = tempfile.NamedTemporaryFile(mode='wt', delete=False)
              tmp_req_file.write('\n'.join(req_lines))
              tmp_req_file.close()
  
              try:
                  check_call(
                      [sys.executable, '-m', 'pip', 'install', '-r', tmp_req_file.name] + pip_flags + install_flags
                  )
              finally:
                  os.unlink(tmp_req_file.name)
  
      return 0
docs: Install and uninstalls the given sets of modules.