기술 · 실용 가이드
터미널에서는 되는데 systemd에서 ModuleNotFoundError? 인터프리터와 sys.path부터 증명하세요
재설치 전에 서비스의 Python, prefix, 사용자, 작업 디렉터리와 검색 경로를 기록하고, 증명된 경계 하나만 고친 뒤 같은 프로브를 반복합니다.

systemd에서만 나는 ModuleNotFoundError는 증거가 나올 때까지 실행 경계 차이로 봅니다. Python, venv, 사용자, HOME, cwd 또는 검색 경로가 셸과 다를 수 있습니다.
sudo pip, chmod, 전역 PYTHONPATH, activate부터 시도하지 마세요. 두 환경에서 같은 작은 프로브를 수집하고 차이가 입증된 항목 하나만 되돌릴 수 있게 수정합니다.
실패한 서비스와 성공한 셸 고정
unit, 핵심 속성, journal traceback을 저장하고 비밀은 남기지 않습니다.
성공 셸과 서비스 계정에서 같은 id, pwd, Python, pip, 프로브를 수집합니다.
import 경계 장부 만들기
executable, prefix, cwd, uid/gid, HOME, sys.path, find_spec을 기록합니다.
같은 Python의 -m pip show를 쓰고 다른 pip 목록을 증거로 삼지 않습니다.
첫 차이 분류
Python이 다르면 ExecStart를 venv Python으로 지정합니다. activate는 필요 없습니다.
cwd만 다르면 절대 WorkingDirectory 또는 패키징을 고칩니다.
증상 아닌 패키지 경계 수정
재현 가능한 서비스 전용 환경과 그 Python의 -m pip를 사용합니다.
Environment는 비밀 아닌 값만, PYTHONPATH는 좁은 시험만 하며 root로 숨기지 않습니다.
reload·restart 후 같은 프로브
필요하면 daemon-reload와 restart 뒤 같은 장부를 다시 수집합니다.
실제 작업과 journal을 확인하고 재부팅 후 최소 권한으로 import돼야 종료합니다.
실패 분기로 가짜 수정 배제
pip show는 되지만 find_spec이 비면 배포명/import명, 선택 구성요소, editable 경로를 확인합니다.
200/CHDIR은 cwd, ExecStart 미발견은 실행 파일부터 고칩니다.
