%20%D0%B8%D0%B7%20%D1%82%D0%B5%D1%80%D0%BC%D0%B8%D0%BD%D0%B0%D0%BB%D0%B0%20Mac.png)
Я пытаюсь запустить программу 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=
решение1
Похоже, правильным решением было бы отключить параметр «Установить переменные среды локали при запуске» в дополнительных параметрах терминала, как описано вhttps://blog.remibergsma.com/2012/07/10/setting-locales-correctly-on-mac-osx-terminal-application/
Чтобы сделать то же самое на iterm2, вам нужно снять флажок Настройки > Профили > Терминал > Устанавливать переменные локали автоматически, как описано здесь.https://apple.stackexchange.com/questions/83428/lang-variable-wrong-in-iterm2-wheres-the-bug
решение2
Пост Проблемы с OS X Terminal UTF-8 есть несколько полезных советов, основанных на Руководство по настройке терминальных приложений:
ВТерминал->Настройки->Настройки->Дополнительно:
ПодМеждународный, убедитесь, что установлена кодировка символовЮникод (UTF-8).
ПодЭмуляция, гарантировать, чтоОтмена ввода не-ASCII с помощью Control-Vявляетсянетнабор.
Этого самого по себе может быть достаточно для решения проблемы.
Используйте команду
locale
и посмотрите наLC_CTYPE
строку, которая должна заканчиваться на.UTF-8
. Если это не так, то в bash.profile
или.bashrc
в домашнем каталоге добавьте строку типа этой:export LC_CTYPE=your-locale-here.UTF-8
Добавьте следующие строки
.inputrc
в домашний каталог (при необходимости создайте его):set meta-flag on set input-meta on set output-meta on set convert-meta off
Чтобы новые настройки вступили в силу, необходимо перезапустить bash.