PYTHON
Termux에서 Python 활용하기
Python은 Termux에서 파일 관리, 백업, 로그 분석, JSON 처리와 간단한 웹 도구를 자동화할 때 유용합니다. MyBoard 운영에서는 PHP 서버를 보조하는 관리 스크립트로 활용할 수 있습니다.
Python 설치
먼저 Termux 패키지 저장소를 갱신하고 Python을 설치합니다.
pkg update
pkg upgrade
pkg install python
python --version
python -m pip --version
설치가 정상이라면 Python 버전과 pip 버전이 표시됩니다. Python 명령이 없으면 python3 명령이 제공되는지도 확인하세요.
command -v python
command -v python3
python3 --version
구형 스마트폰과 Android 버전 주의
이 안내의 기준 환경은 Android 5.0.1과 구형 Termux입니다. 최신 Termux와 최신 Python 패키지는 Android 5.0.1을 지원하지 않거나 설치 중 오류가 발생할 수 있습니다. 현재 기기에 설치된 Termux가 오래된 버전이면 저장소 주소, TLS 인증서, 패키지 서명 키와 Python 버전이 최신 환경과 맞지 않을 수 있습니다.
- 최신 Termux APK를 무조건 설치하지 말고 Android 5.0.1과 CPU 구조에 맞는 신뢰할 수 있는 배포본을 확인합니다.
pkg update에서 저장소 오류가 발생하면 Termux 버전과 저장소 지원 종료 여부를 먼저 확인합니다.- 최신 Python 전용 패키지가 설치되지 않을 수 있으므로 기본 모듈을 우선 사용합니다.
- 패키지 설치 전에는 MyBoard의
data/폴더와 중요한 파일을 별도로 백업합니다. - 구형 기기는 저장공간과 메모리가 작으므로 여러 패키지를 한꺼번에 설치하지 않습니다.
설치 실패가 Python 문법 문제가 아니라 Android 버전이나 Termux 저장소의 호환성 문제일 수 있습니다. 오류 메시지에서 저장소, SSL, ABI, Python 버전 관련 내용을 먼저 구분하세요.
가상 환경 사용
프로젝트별 패키지가 서로 충돌하지 않도록 가상 환경을 사용하는 것이 좋습니다. 단순한 기본 스크립트에는 필수가 아니지만, 외부 패키지를 설치할 때 유용합니다.
cd ~/www/myboard
python -m venv .venv
source .venv/bin/activate
python --version
# 작업이 끝난 뒤 가상 환경 종료
deactivate
구형 Python에서는 venv가 없거나 생성에 실패할 수 있습니다. 이 경우 기본 Python 모듈을 사용하거나, 기기에 맞는 별도 가상 환경 패키지 지원 여부를 확인하세요. 운영 파일을 보관하는 프로젝트 폴더 안에 가상 환경을 만들 때는 공개 ZIP에 .venv/를 포함하지 않는 것이 좋습니다.
파일과 백업 자동화
Python 기본 모듈만으로 파일 목록 확인, 날짜가 붙은 백업 생성, 오래된 임시 파일 검색을 만들 수 있습니다. 외부 패키지가 필요하지 않아 구형 환경에 적합합니다.
cd ~/www/myboard
python - <<'PY'
from pathlib import Path
from datetime import datetime
import shutil
source = Path('data')
backup = Path('backup') / datetime.now().strftime('%Y%m%d_%H%M%S')
backup.parent.mkdir(exist_ok=True)
shutil.copytree(source, backup)
print('백업 완료: {}'.format(backup))
PY
백업 전에 서비스가 파일을 쓰고 있지 않은지 확인하고, 백업 폴더가 충분한 저장공간을 사용하는지 점검하세요.
SQLite 데이터 확인
Python에는 SQLite를 다루는 sqlite3 모듈이 기본으로 포함되는 경우가 많습니다. MyBoard 데이터베이스를 수정하기 전에는 반드시 복사본을 사용하세요.
cd ~/www/myboard
cp data/board.sqlite data/board.sqlite.before_python
python - <<'PY'
import sqlite3
connection = sqlite3.connect('data/board.sqlite')
cursor = connection.cursor()
for table in ('users', 'posts', 'comments'):
try:
count = cursor.execute(f'SELECT COUNT(*) FROM {table}').fetchone()[0]
print(f'{table}: {count}')
except sqlite3.Error as error:
print(f'{table}: 확인 실패 - {error}')
connection.close()
PY
회원, 게시물, 댓글을 직접 수정하는 스크립트는 실수로 데이터를 손상시킬 수 있으므로 조회부터 시작하세요.
간단한 웹 서버
Python은 정적 파일을 확인하는 임시 웹 서버로도 사용할 수 있습니다. PHP가 필요한 MyBoard 자체는 PHP 서버로 실행하고, Python 서버는 HTML이나 백업 파일을 확인할 때만 사용하세요.
cd ~/www
python -m http.server 8000 --bind 127.0.0.1
스마트폰에서 http://127.0.0.1:8000/을 열 수 있습니다. 0.0.0.0으로 열면 같은 네트워크의 다른 기기에서 접근할 수 있으므로, 비밀번호 없는 파일 서버를 인터넷에 노출하지 마세요.
JSON과 API 처리
Python 기본 모듈인 json과 urllib으로 간단한 JSON 파일과 API 응답을 처리할 수 있습니다. 구형 Termux에서는 외부 패키지보다 기본 모듈을 먼저 사용하는 편이 호환성이 좋습니다.
python - <<'PY'
import json
from pathlib import Path
path = Path('settings.json')
if path.exists():
data = json.loads(path.read_text(encoding='utf-8'))
print(json.dumps(data, ensure_ascii=False, indent=2))
else:
print('settings.json 파일이 없습니다.')
PY
외부 API를 사용해야 한다면 먼저 기본 모듈로 가능한지 확인하고, 꼭 필요한 경우에만 python -m pip install requests를 사용하세요. Android 5.0.1용 오래된 Python에서는 최신 requests가 설치되지 않을 수 있습니다.
설치 문제 점검 순서
uname -m으로 기기의 CPU 구조를 확인합니다.getprop ro.build.version.release로 Android 버전을 확인합니다.pkg update와pkg upgrade의 오류 내용을 저장합니다.python --version과python -m pip --version을 확인합니다.- 패키지 설치 오류가 나면 Python 코드 문제가 아니라 저장소, TLS, ABI 또는 버전 호환 문제인지 구분합니다.
- 구형 기기에서 장시간 실행할 때는 발열, 배터리 최적화, 저장공간과 Termux 프로세스 종료 여부를 확인합니다.
보안과 운영 주의사항
- 인터넷에서 받은 Python 스크립트는 실행하기 전에 내용을 확인합니다.
- 비밀번호, SSH 개인키, API 키를 코드에 직접 적지 않습니다.
- Python 테스트 서버를 0.0.0.0으로 실행한 채 장시간 방치하지 않습니다.
- MyBoard DB를 수정하는 자동화는 실행 전 백업과 테스트 DB 확인을 먼저 진행합니다.
- Android 5.0.1 구형 스마트폰에서는 최신 라이브러리보다 작고 단순한 기본 모듈 중심으로 구성합니다.