Решение ( source ):
Я использовал run_console (), которая не пытается запустить браузер, но просит клиента открыть его вручную.Чтобы он автоматически запускал браузер, следует использовать метод run_local_server () , как показано в примере ниже.
Функция run_console инструктируетпользователь, чтобы открыть URL авторизации в своем браузере .После того как пользователь авторизует приложение, сервер авторизации отображает веб-страницу с кодом авторизации, который пользователь затем вставляет в приложение.Библиотека авторизации автоматически обменивает код для токена доступа.
credentials = flow.run_console()
Функция run_local_server пытается открыть авторизациюURL в браузере пользователя. Он также запускает локальный веб-сервер для прослушивания ответа на авторизацию.После того как пользователь завершает поток авторизации, сервер авторизации перенаправляет браузер пользователя на локальный веб-сервер.Этот сервер получает код авторизации из браузера и завершает работу, а затем обменивает код для токена доступа.
credentials = flow.run_local_server(host='localhost',
> port=8080,
> authorization_prompt_message='Please visit this URL: {url}',
> success_message='The auth flow is complete; you may close this window.',
> open_browser=True)
Спасибо @Hassan Voyeau за помощь.