エラー対処: RuntimeError: Click will abort further execution because Python 3 was configured to use ASCII as encoding for the environment.

以下のエラーの対処法を記します。

RuntimeError: Click will abort further execution because Python 3 was configured to use ASCII as encoding for the environment. 
Consult https://click.palletsprojects.com/python3/ for mitigation steps.


はじめに

先日、ある作業をしているときに、次のエラーに遭遇しました。

RuntimeError: Click will abort further execution because Python 3 was configured to use ASCII as encoding for the environment. 
Consult https://click.palletsprojects.com/python3/ for mitigation steps.

This system supports the C.UTF-8 locale which is recommended. 
You might be able to resolve your issue by exporting the following environment variables:

    export LC_ALL=C.UTF-8
    export LANG=C.UTF-8

ClickというPythonパッケージ*1のロケールについてのエラーのようです。

エラーメッセージには既に解決策が示されていますが、私の場合はそれでは解決せず、長い間右往左往してました。

今回は、このエラーの解決方法を書き残します。


作業環境

作業はUbuntu上のCloud9で行い、Pythonバージョンは以下の通りでした。

$ lsb_release -d
Description:    Ubuntu 18.04.4 LTS

$ python --version
Python 3.6.9


解決策1: export LC_ALL=C.UTF-8

まず最初に行うべき対処は、エラーメッセージに従い、以下のようにロケールを変更することです。

export LC_ALL=C.UTF-8
export LANG=C.UTF-8

エラーメッセージで検索した時にでヒットするstack overflowでも専らこの解決策が議論されており、多くの状況でこの対処法が機能するようです。

なお、システムによってはUTF-8の表記に多少の差異があるようで、場合によっては次のようにUTF8と記述する必要があるようです。

export LC_ALL=C.UTF8
export LANG=C.UTF8


なお、どのようなロケール表記がサポートされているかは、次のコマンドで確認できます。

locale -a


しかし、私の場合は上記のいずれの対処法でも解決しませんでした。


解決策2: Python3.7以上を使う

そこで次の解決策は、Python3.7以上を使うことです。

エラーメッセージにも示されているClickのドキュメントページには、以下の記載があります。

In Python 3.7 and later you will no longer get a RuntimeError in many cases thanks to PEP 538 and PEP 540, which changed the default assumption in unconfigured environments.

Python3.7以上ではRuntimeErrorは起きないよ、とのことです。

私の場合はまさしく、Python3.7をインストールすることでエラーが解消しました。

Python3.7のインストール + Python3.7による仮想環境の構築は、以下のようにして実行します。

# Python3.7 インストール
sudo apt update
sudo apt install python3.7

# python3.7-venvのインストール
sudo apt install python3.7-venv

# Python仮想環境の作成とアクティブ化
python3.7 -m venv .venv
source .venv/bin/activate


以上のように、Python3.7の環境を再構築することで、このエラーを解消することが出来ました。


おわりに

今回は、PythonパッケージClickのロケールエラーの解消方法を記しました。

エラーメッセージに示されている解決法が機能しなかったことで少し焦ってしまい、長い時間を無駄にしてしまいました。

困ったらまずドキュメントをよく読む、という基本の大切さを改めて身体に刻みます。

以上、同じ境遇のどなたかの参考になれば幸いです。


参考

Python 3 Support — Click Documentation (7.x)

*1:もう少し補足すると、Clickは“Command Line Interface Creation Kit”です。