テクノロジー · 実用ガイド
端末では動くのに systemd で ModuleNotFoundError?直ちに再インストールせず境界を証明
サービスの Python、prefix、ユーザー、作業ディレクトリ、sys.path を記録し、差が証明された境界だけを直して同じプローブを再実行します。

systemd だけで起きる ModuleNotFoundError は、証拠が出るまで実行境界の差として扱います。Python、venv、ユーザー、HOME、cwd、検索パスが端末と異なる可能性があります。
sudo pip、chmod、全体 PYTHONPATH、activate から始めません。同じ小さなプローブを両環境で取り、差を一つずつ可逆に直します。
失敗した service と成功した shell を固定
unit、重要 property、journal traceback を保存し、秘密は記録しません。
成功 shell と service identity で同じ id、pwd、Python、pip、probe を採取します。
import 境界台帳を作る
executable、prefix、cwd、uid/gid、HOME、sys.path、find_spec を記録します。
同じ Python の -m pip show を使い、別 pip の一覧を証拠にしません。
最初の差を分類
Python が違えば ExecStart を venv の Python にします。activate は不要です。
cwd だけ違えば絶対 WorkingDirectory または packaging を修正します。
症状でなく package 境界を修復
再現可能で service user が読める環境を使い、その Python の -m pip を使います。
Environment は非秘密だけ。狭い PYTHONPATH は試験に限定し root で隠しません。
reload・restart・再測定
必要なら daemon-reload と restart 後、同じ台帳を再取得します。
実ジョブと journal を確認し、再起動後も最小権限で import できて完了です。
失敗分岐で誤修復を避ける
pip show 成功・find_spec 空なら distribution/import 名、optional build、editable path を確認します。
200/CHDIR は cwd、ExecStart 不在は実行ファイルを先に直します。
