click
ランタイムが python3 であるがエンコーディングが ASCII であることをlibが検出すると、python プログラムが突然終了します。
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 http://click.pocoo.org/python3/ for mitigation steps.
私の場合、この問題の原因が見つかりました。Mac から Linux ホストに接続すると、Terminal.app が SSH セッション ロケールを Mac ロケール (es_ES.UTF-8) に設定しましたが、Linux ホストがインストールされていません。そのようなロケール (en_US.utf-8 のみ)。
それを修正するために最初の回避策を適用しました(ただし、多くの問題がありました。受け入れられた回答を参照してください):
import locale, codecs
# locale.getpreferredencoding() == 'ANSI_X3.4-1968'
if codecs.lookup(locale.getpreferredencoding()).name == 'ascii':
os.environ['LANG'] = 'en_US.utf-8'
編集:より良いパッチについては、私の受け入れられた回答を参照してください。
私のすべての Linux ホストは、ロケールとして「en_US.utf-8」をインストールしました (Fedora はデフォルトで使用します)。
私の質問は: python3 スクリプトでロケールを選択/強制するより良い (より堅牢な) 方法はありますか? たとえば、システムで利用可能なロケールの 1 つを設定します。
この問題を解決する別の方法があるかもしれませんが、私はそれを見つけられませんでした。