docs: def execute_setup_name(self):  # type: () -> Optional[str]
          """
          Runs code, so this is a bit dangerous, especially if it isn't your own
          :return:
          """
          try:
              name = execute_get_text("python setup.py --name")
          except subprocess.CalledProcessError:
              # setup.py is not always in an executable state
              return None
          if not name:
              return None
          name = name.strip(" \n\t")
          if " " in name or "\n" in name:
              # likely includes print() that ruin results
              return None
          return name