Cómo deshabilitar el mensaje de bienvenida al importar pygame

4 minutos de lectura

Avatar de usuario de Aaron
Aarón

Cuando importo pygame, imprime la versión y el mensaje de bienvenida. El mensaje dice:

pygame 1.9.4
Hello from the pygame community. https://www.pygame.org/contribute.html

¿Por qué se imprime esto? ¿Cómo puedo desactivar este mensaje?

  • Es de mala educación que una biblioteca se autopromocione.

    – fche

    5 de enero de 2019 a las 15:13

  • Problema relevante de pygame: github.com/pygame/pygame/issues/1468

    – Cas

    13 de diciembre de 2019 a las 17:38

  • OH genial… Otra variable env (y parece que no funciona si se importa el mezclador desde) — Tiempo para una nueva biblioteca

    – Enojado 84

    15 de junio a las 10:37


  • No creo que el propósito del mensaje de bienvenida sea publicidad. Es un llamado a la contribución. Y lo considero muy justo ya que Pygame es una de las mejores bibliotecas de Python. Además, uno puede suprimir el mensaje muy fácilmente desde el script PY.

    – Apóstoles

    5 de septiembre a las 2:59

Avatar de usuario de Eduardo Dalapicola
Eduardo Dalapicola

Como puede verse en el código fuenteel mensaje no se imprime si la variable de entorno PYGAME_HIDE_SUPPORT_PROMPT Está establecido. Entonces, el siguiente código podría usarse para importar pygame sin imprimir el mensaje:

import os
os.environ['PYGAME_HIDE_SUPPORT_PROMPT'] = "hide"
import pygame

Tenga en cuenta que el valor no tiene que ser "hide" pero también puede ser cualquier otra cosa, y la variable de entorno también se puede configurar de otras maneras para lograr lo mismo.

  • Se bloquea en las computadoras donde python no está instalado si creamos un archivo .exe del archivo .py usando pyinstaller

    – Súper Sanglap

    11 de marzo de 2021 a las 4:03

avatar de usuario de tsbertalan
bertalan

No vi una forma natural de hacerlo (el tuyo es el único resultado de Google para esto que pude encontrar), pero logré lo mismo al deshabilitar temporalmente la salida estándar mientras importaba pygame.

import os, sys
with open(os.devnull, 'w') as f:
    # disable stdout
    oldstdout = sys.stdout
    sys.stdout = f

    import pygame

    # enable stdout
    sys.stdout = oldstdout

Aquí está la alternativa sugerida por @Mad Physicist:

import contextlib
with contextlib.redirect_stdout(None):
    import pygame

  • Eso es perfectamente natural. Probar contextlib.redirect_stdout(None) por una preferencia. Menos importaciones y renglones en general. También probablemente más robusto.

    – Físico loco

    22 de julio de 2018 a las 23:36


  • por cierto, contextlib.redirect_stdout es una cosa de python3+, no en python2

    – fche

    5 de enero de 2019 a las 15:15

  • Con contextlib.redirect_stdout (Ninguno), mi cursor SSH desaparece. Para mí esto funcionó: stackoverflow.com/a/8391735/8474284

    – DaWe

    1 de septiembre de 2019 a las 11:08


  • Recomiendo eliminar el primer fragmento de código, porque la segunda solución (usar contextlib) es mucho mejor. Es menos código, no deja variables globales (oldstdout) en el espacio de nombres y restaura stdout en caso de excepciones. ¿Por qué reinventar la rueda si la biblioteca estándar brinda esta funcionalidad de una manera simple y robusta?

    – wovano

    22 oct a las 12:48

El código fuente contiene una condición que protege la impresión de este mensaje:

if 'PYGAME_HIDE_SUPPORT_PROMPT' not in os.environ:
    print('pygame %s' % ver)
    print('Hello from the pygame community. https://www.pygame.org/contribute.html')

Ver este compromiso

Esto se agregó recientemente (octubre de 2018) y hasta ahora se lanzó 1.9.4 antes de esto. Una vez que se publique la próxima versión> 1.9.4, simplemente debería poder ejecutar su código con PYGAME_HIDE_SUPPORT_PROMPT= ./my_code.py para ocultar el mensaje.

Avatar de usuario de Kalif
Kalif

Puede navegar a la carpeta de la biblioteca de pygame, algo como esto para la versión 3.6 de 32 bits:

Python36-32\Lib\site-packages\pygame

y editar el __init__.py archivo y elimine la última línea para deshacerse de este mensaje.

  1. importar pygame
  2. Obtenga la ubicación del archivo de inicio: f = pygame.__file__
  3. Abra f y comente la impresión en las dos últimas líneas del archivo.

Avatar de usuario de Pyzard
Pirámide

Sobre la respuesta de Eduardo, estaba teniendo problemas con mi formateador autopep8 y no pude poner la línea para configurar el PYGAME_HIDE_SUPPORT_PROMPT variable de entorno encima de la línea para importar pygame. Por lo tanto, tuve que hacer algo como esto:

import os # last import (all other imports above this one)
os.environ['PYGAME_HIDE_SUPPORT_PROMPT'] = 'hide'


def import_pygame():
    global pygame
    import pygame


import_pygame()

Espero que esto ayude a cualquiera que tenga el mismo problema.

Avatar de usuario de DaWe
dawe

Para mí, solo esto funcionó en python 3:

import sys, os

# Disable print
def blockPrint():
    sys.stdout = open(os.devnull, 'w')

# Enable print
def enablePrint():
    sys.stdout = sys.__stdout__


blockPrint()
import pygame
enablePrint()

(gracias por bandolero!)

¿Ha sido útil esta solución?