El programa Python falla solo si se ejecuta (a través de ssh) desde una terminal mac

El programa Python falla solo si se ejecuta (a través de ssh) desde una terminal mac

Estoy intentando ejecutar un programa Python en un clúster de procesamiento de datos (Linux). El programa funciona bien si me dirijo al clúster desde mi escritorio Linux y lo inicio, pero falla si me conecto al clúster desde mi computadora portátil Mac e intento ejecutarlo. Aparece el siguiente error:

[muzzle@cluster]~% acme-calibrate detector DARK --in-folder /gpfs/acme/exp/instrument/201802/experiment1/raw --out-folder /home/muzzle/dark_out --run 28
Traceback (most recent call last):
  File "/home/boff/calframework/framework/extern/bin/acme-calibrate", line 11, in <module>
    load_entry_point('acme-Offline-Calibration', 'console_scripts', 'acme-calibrate')()
  File "/home/boff/calframework/framework/extern/lib/python3.4/site-packages/setuptools-39.1.0-py3.4.egg/pkg_resources/__init__.py", line 480, in load_entry_point
  File "/home/boff/calframework/framework/extern/lib/python3.4/site-packages/setuptools-39.1.0-py3.4.egg/pkg_resources/__init__.py", line 2691, in load_entry_point
  File "/home/boff/calframework/framework/extern/lib/python3.4/site-packages/setuptools-39.1.0-py3.4.egg/pkg_resources/__init__.py", line 2322, in load
  File "/home/boff/calframework/framework/extern/lib/python3.4/site-packages/setuptools-39.1.0-py3.4.egg/pkg_resources/__init__.py", line 2328, in resolve
  File "/home/boff/pycalibrate_tmp/acme_calibrate/calibrate.py", line 236, in <module>
nb = nbformat.read(f, as_version=4)
  File "/home/boff/calframework/framework/extern/lib/python3.4/site-packages/nbformat/__init__.py", line 141, in read
return reads(fp.read(), as_version, **kwargs)
  File "/home/boff/calframework/framework/extern/lib/python3.4/encodings/ascii.py", line 26, in decode
return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 150: ordinal not in range(128)

Parece estar relacionado con alguna conversión de UTF a ASCII, pero estoy fuera de mi alcance.

Recibo el mismo error tanto con terminal.app como con iterm2. Por cierto, solía tener instalada la integración del shell iterm2, pero ahora la eliminé.

La configuración regional en la computadora portátil es:

$ locale
LANG=
LC_COLLATE="C"
LC_CTYPE="UTF-8"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL=

La configuración regional en el servidor remoto es:

% locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
LC_CTYPE=UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

Esta es la configuración regional en mi escritorio Linux, es idéntica a la del clúster:

$ locale
LANG=en_GB.UTF-8
LANGUAGE=en_GB:en
LC_CTYPE="en_GB.UTF-8"
LC_NUMERIC="en_GB.UTF-8"
LC_TIME="en_GB.UTF-8"
LC_COLLATE="en_GB.UTF-8"
LC_MONETARY="en_GB.UTF-8"
LC_MESSAGES="en_GB.UTF-8"
LC_PAPER="en_GB.UTF-8"
LC_NAME="en_GB.UTF-8"
LC_ADDRESS="en_GB.UTF-8"
LC_TELEPHONE="en_GB.UTF-8"
LC_MEASUREMENT="en_GB.UTF-8"
LC_IDENTIFICATION="en_GB.UTF-8"
LC_ALL=

Respuesta1

Parece que la solución correcta fue desarmar "Establecer variables de entorno local al inicio" en las opciones avanzadas del terminal como se describe enhttps://blog.remibergsma.com/2012/07/10/setting-locales-correctly-on-mac-osx-terminal-application/

Para hacer lo mismo en iterm2, debe anular la selección de Preferencias > Perfiles > Terminal > Establecer variables locales automáticamente, como se describe aquíhttps://apple.stackexchange.com/questions/83428/lang-variable-wrong-in-iterm2-wheres-the-bug

Respuesta2

El cargo Problemas con OS X Terminal UTF-8 tiene algunos consejos útiles, basados ​​en Una guía para ayudar a configurar aplicaciones de terminal:

  1. EnTerminal->Preferencias->Configuración->Avanzado:

    • BajoInternacional, asegúrese de que la codificación de caracteres esté configurada enUnicódigo (UTF-8).

    • BajoEmulación, asegurarse de queEscapar de la entrada no ASCII con Control-Vesnocolocar.

    Esto por sí solo puede ser suficiente para resolver el problema.

  2. Utilice el comando localey observe la LC_CTYPElínea, que debería terminar en .UTF-8. Si no es así, en bash .profileo .bashrcen el directorio de inicio, agregue una línea como esta:

    export LC_CTYPE=your-locale-here.UTF-8
    
  3. Agregue las siguientes líneas al .inputrcdirectorio de inicio (créelo si es necesario):

    set meta-flag on
    set input-meta on
    set output-meta on
    set convert-meta off
    

Debes reiniciar bash para que la nueva configuración surta efecto.

información relacionada