1

Я пытаюсь запустить программу Python на кластере обработки данных (Linux). Программа работает нормально, если я ssh в кластер с моего рабочего стола Linux и запускаю его, но не удается, если я ssh в кластер с моего ноутбука Mac и пытаюсь запустить его, я получаю следующую ошибку:

[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)

Похоже, это связано с некоторым преобразованием из UTF в ASCII, но я не в себе.

Я получаю одинаковую ошибку как с Terminal.app, так и с iterm2. Кстати, раньше у меня была установлена интеграция с оболочкой iterm2, но сейчас я их удалил.

Локаль на ноутбуке:

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

Локаль на удаленном сервере:

% 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=

Это локаль на моем рабочем столе linux, она идентична кластеру:

$ 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=

2 ответа2

1

Похоже, что правильным решением было снять "Задать переменные среды локали при запуске" в расширенных параметрах терминала, как описано в https://blog.remibergsma.com/2012/07/10/setting-locales-correctly-on-mac -osx-терминал-приложения /

Чтобы сделать то же самое на iterm2, вам нужно отменить выбор «Предпочтения»> «Профили»> «Терминал»> «Автоматически устанавливать переменные языка», как описано здесь https://apple.stackexchange.com/questions/83428/lang-variable-wrong-in-iterm2-wheres -баг

0

В выпусках UTF-8 Terminal OS X есть несколько полезных советов, основанных на Руководстве по настройке приложений терминала:

  1. В Терминале-> Настройки-> Настройки-> Дополнительно:

    • В International убедитесь, что кодировка символов установлена в Unicode (UTF-8).

    • В разделе « Эмуляция» убедитесь, что вход Escape без ASCII с Control-V не установлен.

    Этого само по себе может быть достаточно для решения проблемы.

  2. Используйте команду locale и посмотрите на строку LC_CTYPE , которая должна заканчиваться на .UTF-8 . Если это не так, то в bash .profile или .bashrc в домашнем каталоге добавьте такую строку:

    export LC_CTYPE=your-locale-here.UTF-8
    
  3. Добавьте следующие строки в .inputrc в домашнем каталоге (создайте его при необходимости):

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

Вам нужно перезапустить bash, чтобы новые настройки вступили в силу.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .