Everyday is Sunday !

趣味満載のブログ #電子工作 #東方 #アニメ #音楽

Ubuntu Efinity2023.1 の環境変数設定スクリプトにバグがあった話

端末でコマンド入力失敗時に変なエラーが出るようになった。

タイトルの通り、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 のパス関連を失敗すると、こういったエラーが発生するのですね...。ためになりました。