端末でコマンド入力失敗時に変なエラーが出るようになった。
タイトルの通り、Ubutnu でコマンド失敗時にエラーが出るようになりました。
ls-l Python path configuration: PYTHONHOME = '/tools/efinity/2023.1' PYTHONPATH = '/tools/efinity/2023.1/lib:' program name = '/usr/bin/python3' isolated = 0 environment = 1 user site = 0 import site = 1 sys._base_executable = '/usr/bin/python3' sys.base_prefix = '/tools/efinity/2023.1' sys.base_exec_prefix = '/tools/efinity/2023.1' sys.platlibdir = 'lib' sys.executable = '/usr/bin/python3' sys.prefix = '/tools/efinity/2023.1' sys.exec_prefix = '/tools/efinity/2023.1' sys.path = [ '/tools/efinity/2023.1/lib', '', '/tools/efinity/2023.1/lib/python310.zip', '/tools/efinity/2023.1/lib/python3.10', '/tools/efinity/2023.1/lib/python3.10/lib-dynload', ] Fatal Python error: init_fs_encoding: failed to get the Python codec of the filesystem encoding Python runtime state: core initialized ModuleNotFoundError: No module named 'encodings'
色々調べた結果、Python の環境変数が間違っていることが原因のようです。 設定した覚えはないのですが、下記の修正が必要です。
PYTHONHOME = '/tools/efinity/2023.1' PYTHONPATH = '/tools/efinity/2023.1/lib:'
次のコマンドで見てみましたが、PYTHON 関連は見当たらず... unset コマンドとかを bashrc に記載は絶対やりたくないので、根気強く探します。
cat ~/.bashrc cat ~/.bash_profile cat /etc/profile cat /etc/bash.bashrc
原因を特定しました。 ~/.bashrc に efinity の環境設定コマンドを実行するようにしていますが、 このスクリプト内でPYTHONPATH を設定しているようでした。 2023.1 の setup.sh を実行すると発生するようです。2022.1 では発生しません。 より詳しく見ていくと、2023.1 では PYTHONHOME の環境変数が設定されており、2022.1 では PYTHONHOME は設定されません。この差分が原因のようです。
# source /tools/efinity/2023.1/bin/setup.sh source /tools/efinity/2023.1/bin/setup.sh
setup.sh の中身を確認すると...、奴がいました。 コメントアウトから保存し端末を再起動します。
export PYTHONPATH=$EFINITY_HOME/lib:$PYTHONPATH export PYTHONHOME=$EFINITY_HOME
コマンドミスを入力したら期待通りの動作になりました。
ls-l ls-l: コマンドが見つかりません
苦労しましたが、原因の特定ができて良かったです。 環境変数とか諸々の設定は、bashrc など一箇所に記載するようにして、変更点はコメントなどできちんと残しておくようにしていきます。 そもそもの話ですが、Python のパス関連を失敗すると、こういったエラーが発生するのですね...。ためになりました。