%20%E5%AE%9F%E8%A1%8C%E3%81%97%E3%81%9F%E5%A0%B4%E5%90%88%E3%81%AB%E3%81%AE%E3%81%BF%E5%A4%B1%E6%95%97%E3%81%97%E3%81%BE%E3%81%99%E3%80%82.png)
データ処理 (Linux) クラスターで Python プログラムを実行しようとしています。Linux デスクトップからクラスターに SSH 接続してプログラムを起動するとプログラムは正常に実行されますが、Mac ラップトップからクラスターに SSH 接続してプログラムを実行しようとすると失敗し、次のエラーが表示されます。
[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 ターミナル UTF-8 の問題 役に立つアドバイスがいくつかあります。 ターミナルアプリの設定に役立つガイド:
でターミナル->環境設定->設定->詳細:
下国際的文字エンコードが設定されていることを確認してくださいユニコード (UTF-8)。
下エミュレーション、 確認しておいてCtrl-Vで非ASCII入力をエスケープするはないセット。
これだけで問題を解決するのに十分かもしれません。
コマンドを使用して、で終わる行
locale
を確認します。 そうでない場合は、bashまたはホーム ディレクトリで、次のような行を追加します。LC_CTYPE
.UTF-8
.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 を再起動する必要があります。