Soporte de Python 3¶

Manejo de sustitutos en Python 3¶

Click en Python 3 hace todo el manejo de Unicode en la biblioteca estándary está sujeto a su comportamiento. En Python 2, click hace todo el manejo de Unicode por sí mismo, lo que significa que hay diferencias en el comportamiento de los errores.

La diferencia más evidente es que en Python 2, Unicode «simplemente funciona», mientras que en Python 3, requiere un cuidado extra. La razón de esto es que enPython 3, la detección de la codificación se hace en el intérprete y en Linux y algunos otros sistemas operativos su manejo de la codificación es problemático.

La mayor fuente de frustración es que los scripts de clic invocados por los sistemasinit (sysvinit, upstart, systemd, etc.), herramientas de despliegue (salt, puppet), o trabajos de cron (cron) se negarán a trabajar a menos que se exporte una configuración regional Unicode.

Si click encuentra un entorno de este tipo, impedirá la ejecución posterior para obligarle a establecer una configuración regional. Esto se hace porque click no puede conocer el estado del sistema una vez que es invocado y restaurar los valoresantes de que el manejo de Unicode de Python se ponga en marcha.

Si ves algo como este error en Python 3:

Traceback (most recent call last): ...RuntimeError: Click will abort further execution because Python 3 was configured to use ASCII as encoding for the environment. Either switch to Python 2 or consult for http://click.pocoo.org/python3/ mitigation steps.

Estás tratando con un entorno en el que Python 3 piensa que estás restringido a datos ASCII. La solución a estos problemas es diferente dependiendo de la configuración regional en la que se ejecute su ordenador.

Por ejemplo, si tienes una máquina Linux alemana, puedes solucionar el problema exportando la configuración regional a de_DE.utf-8:

export LC_ALL=de_DE.utf-8export LANG=de_DE.utf-8

Si estás en una máquina estadounidense, en_EN.utf-8 es la codificación elegida. En algunos sistemas Linux más recientes, también puedes probar C.UTF-8 como locale:

export LC_ALL=C.UTF-8export LANG=C.UTF-8

Tienes que hacer esto antes de invocar tu script de Python. Si tienes curiosidad por las razones de esto, puedes unirte a las discusiones en el bug tracker dePython 3:

  • ASCII es una mala codificación por defecto del sistema de archivos

  • Utilice surrogateescape como gestor de errores por defecto

  • Python 3 genera errores Unicode en la localización C

  • LC_CTYPE=C: pydoc deja el terminal en un estado inutilizable (esto es relevante para clickbec porque el soporte del paginador es proporcionado por el módulo pydoc de stdlib)

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *