code: def maybe_2to3(filename, modname=None):
      
      need_2to3 = False
      filename = os.path.abspath(filename)
      if any(filename.startswith(d) for d in DIRS):
          need_2to3 = True
      elif modname is not None and any(modname.startswith(p) for p in PACKAGES):
          need_2to3 = True
      if not need_2to3:
          return filename
      outfilename = '/_auto2to3_'.join(os.path.split(filename))
      if (not os.path.exists(outfilename) or
          os.stat(filename).st_mtime > os.stat(outfilename).st_mtime):
          try:
              with open(filename) as file:
                  contents = file.read()
              contents = rt.refactor_docstring(contents, filename)
              tree = rt.refactor_string(contents, filename)
          except Exception as err:
              raise ImportError("2to3 couldn't convert %r" % filename)
          outfile = open(outfilename, 'wb')
          outfile.write(str(tree).encode('utf8'))
          outfile.close()
      return outfilename
docs: Returns a python3 version of filename.