명령줄 인터페이스
Ren'Py에는 개발 작업 일부를 자동화하는 명령줄 인터페이스(CLI)가 있습니다. 지속적 통합과 스크립트를 이용한 릴리스에 활용할 수 있습니다. 대부분의 경우에는 필요하지 않으며, 이러한 작업은 모두 Ren'Py 런처에서도 수행할 수 있습니다.
이 페이지의 예제는 Ren'Py SDK 디렉터리(renpy.py, renpy.sh, renpy.exe가 있는 디렉터리)에서 CLI를 실행한다고 가정합니다. Linux/macOS용 예제와 Windows용 예제를 제공합니다.
CLI는 고정된 인터페이스가 아니므로 필요에 따라 Ren'Py 릴리스 사이에 바뀔 수 있습니다. 이 페이지는 Ren'Py 8.5.3을 기준으로 합니다.
빠른 작업 예제
다음 작업 흐름을 복사하여 시작점으로 사용하세요. 경로와 언어 코드는 필요에 맞게 바꾸세요.
프로젝트 실행
cd /path/to/renpy
./renpy.sh /path/to/project run
cd C:\path\to\renpy
.\lib\py3-windows-x86_64\python.exe renpy.py C:\path\to\project run
배포판 빌드
런처 도구로 데스크톱 배포판(Windows/macOS/Linux)을 빌드합니다.
cd /path/to/renpy
./renpy.sh launcher distribute /path/to/project --destination /path/to/output
cd C:\path\to\renpy
.\lib\py3-windows-x86_64\python.exe renpy.py launcher distribute C:\path\to\project --destination C:\path\to\output
번역 생성 및 업데이트
번역 파일을 생성하거나 업데이트한 뒤 번역자에게 전달할 대사와 문자열을 내보냅니다.
cd /path/to/renpy
./renpy.sh /path/to/project translate french
./renpy.sh /path/to/project dialogue french --strings
cd C:\path\to\renpy
.\lib\py3-windows-x86_64\python.exe renpy.py C:\path\to\project translate french
.\lib\py3-windows-x86_64\python.exe renpy.py C:\path\to\project dialogue french --strings
구문
참고
이 페이지에서 사용하는 표기법은 다음과 같습니다.
<name>은 프로젝트 경로나 언어 코드처럼 직접 바꾸어 넣을 값입니다.[item]은 선택 사항이므로 생략할 수 있습니다.
./renpy.sh [global options...] [<basedir>] [<command>] [command options...]
.\lib\py3-windows-x86_64\python.exe renpy.py [global options...] [<basedir>] [command] [command options...]
- <basedir>
- 기본값:
Ren'Py 실행 파일(런처)이 있는 디렉터리
아래 명령 설명에서 <basedir>는 프로젝트 기본 디렉터리의 경로입니다.
- <command>
- 기본값:
run
실행할 명령을 지정합니다.
전역 옵션
다음 플래그는 모든 명령에서 사용할 수 있습니다.
- --savedir <directory>
저장 파일과 영구 데이터를 보관할 디렉터리를 지정합니다.
- --trace <level>
trace.txt에 기록할 Ren'Py 추적 수준을 지정합니다. (1=호출별, 2=줄별)
- --version
사용 중인 Ren'Py 버전을 표시합니다.
- --compile
작업 전에 모든 .rpy 스크립트를 강제로 재컴파일합니다.
- --compile-python
game/cache/bytecode-*.rpyb에서 읽는 대신 모든 Python 파일을 강제로 재컴파일합니다.
- --keep-orphan-rpyc
컴파일 시 같은 이름의
.rpy또는_ren.py파일과 연결되지 않은.rpyc파일을 삭제하지 않도록 합니다.
- --errors-in-editor
오류를 텍스트 편집기에서 엽니다.
- --safe-mode
플레이어가 그래픽을 설정할 수 있도록 Ren'Py를 강제로 안전 모드에서 시작합니다.
- --help, -h
명령과 구문을 설명하는 도움말을 표시하고 종료합니다. 가장 최신 명령 정보를 확인할 수 있습니다.
Ren'Py는 게임 정보를 JSON 파일로 덤프할 수 있습니다. 다음 옵션으로 파일과 덤프할 내용을 선택합니다.
- --json-dump <file>
JSON 파일 이름을 지정합니다.
- --json-dump-private
밑줄 _로 시작하는 비공개 이름도 덤프에 포함합니다.
- --json-dump-common
common 디렉터리에서 정의한 이름도 덤프에 포함합니다.
참고
CLI는 릴리스마다 바뀔 수 있습니다. 최신 명령과 플래그를 보려면 다음을 실행하세요.
./renpy.sh --help
.\lib\py3-windows-x86_64\python.exe renpy.py --help
특정 명령의 최신 옵션을 보려면 다음을 실행하세요.
./renpy.sh <basedir> <command> --help
.\lib\py3-windows-x86_64\python.exe renpy.py <basedir> <command> --help
핵심 작업 명령
프로젝트 실행
현재 프로젝트를 정상적으로 실행합니다. 명령을 지정하지 않으면 실행되는 기본 명령입니다.
./renpy.sh <basedir> run [options...]
.\lib\py3-windows-x86_64\python.exe renpy.py <basedir> run [options...]
- --profile-display
화면을 그리는 데 걸리는 시간을 보고합니다.
config.profile을 True로 설정하는 것과 같습니다.
- --debug-image-cache
이미지 캐시 정보를 image_cache.txt에 기록합니다.
config.debug_image_cache를 True로 설정하는 것과 같습니다.
- --warp <filename:linenumber>
지정한 줄 바로 앞으로 워프하려고 시도합니다.
filename:linenumber쌍을 인수로 받습니다.워프 기능을 사용하려면
config.developer가 True여야 합니다.
종료
게임을 즉시 종료합니다.
./renpy.sh <basedir> quit
.\lib\py3-windows-x86_64\python.exe renpy.py <basedir> quit
컴파일
게임을 컴파일하여 .rpy 파일로부터 .rpyc 파일을 생성합니다. 런처의 “강제 재컴파일(Force Recompile)” 버튼과 같습니다.
./renpy.sh <basedir> compile [--keep-orphan-rpyc]
.\lib\py3-windows-x86_64\python.exe renpy.py <basedir> compile [--keep-orphan-rpyc]
- --keep-orphan-rpyc
같은 이름의
.rpy또는_ren.py파일과 연결되지 않은.rpyc파일을 삭제하지 않도록 합니다.
인터랙티브 디렉터
인터랙티브 디렉터를 시작하고 게임을 실행합니다.
./renpy.sh <basedir> director
.\lib\py3-windows-x86_64\python.exe renpy.py <basedir> director
영구 데이터 제거
영구 데이터를 삭제합니다. 영구 데이터는 다음 여러 위치에 있으므로 편리하게 사용할 수 있습니다.
게임 저장 폴더
config.save_directory로 지정한 위치
./renpy.sh <basedir> rmpersistent
.\lib\py3-windows-x86_64\python.exe renpy.py <basedir> rmpersistent
경고
잠금 해제 항목, 읽은 메시지, 환경설정을 포함한 모든 게임 진행 정보가 초기화됩니다.
프로젝트 업데이트
웹 호스트에서 Ren'Py 게임 업데이트를 다운로드하고 설치합니다. 자세한 내용은 HTTPS/HTTP 업데이터를 참조하세요.
매개변수는 updater.update()에서 사용하는 것과 같습니다.
./renpy.sh <basedir> update <url> [options...]
.\lib\py3-windows-x86_64\python.exe renpy.py <basedir> update <url> [options...]
- <url>
updates.json 파일의 URL을 지정합니다.
- --base <directory>
업데이트할 게임의 기본 디렉터리를 지정합니다. 기본값은 현재 게임입니다.
- --force
버전 번호가 같아도 강제로 업데이트합니다.
- --key <key>
업데이트에 사용할 공개 키가 들어 있는 파일입니다.
- --simulate <option>
실제 업데이트 없이 업데이트 GUI를 테스트하는 시뮬레이션 모드입니다.
available,not_available,error중 하나입니다.
경고
게임 파일을 수정합니다. 주의하여 사용하세요.
검증과 테스트
스크립트 검사(Lint)
게임의 Lint 보고서를 생성합니다. 스크립트 오류를 검사하고 스크립트 통계를 출력합니다. 런처의 “스크립트 검사(Check Script (Lint))” 버튼과 같습니다.
./renpy.sh <basedir> lint [<filename>] [options...]
.\lib\py3-windows-x86_64\python.exe renpy.py <basedir> lint [<filename>] [options...]
- <filename>
지정하면 Lint 보고서를 표준 출력 대신 해당 파일에 기록합니다.
- --error-code
Lint 오류가 있으면 오류 코드 1로 종료합니다. CI 시스템에서 Lint 실패를 감지할 때 유용합니다.
- --reserved-parameters
Ren'Py 문의 매개변수에 사용한 Ren'Py 또는 Python 예약 이름을 보고합니다.
- --by-character
캐릭터별 블록 수, 단어 수, 문자 수를 보고합니다.
- --check-unclosed-tags
닫히지 않은 텍스트 태그를 보고합니다.
- --all-problems
종류별로 처음 열 개만 보고하는 대신 모든 문제를 보고합니다.
테스트 케이스 실행
게임의 자동화 테스트를 실행합니다.
- 예제:
./renpy.sh <basedir> test [<testcase>] [options...]
.\lib\py3-windows-x86_64\python.exe renpy.py <basedir> test [<testcase>] [options...]
- <testcase>
실행할 테스트 케이스나 테스트 모음의 이름을 지정합니다. 지정하지 않으면 "global" 테스트 모음을 실행합니다.
- --enable_all
enabled속성과 관계없이 모든 테스트 케이스와 테스트 모음을 실행합니다.
- --overwrite_screenshots
screenshot 문 실행 시 기존 스크린샷을 덮어씁니다.
- --hide-header
테스트 실행 시작 시 머리말을 표시하지 않습니다.
- --hide-execution {no|hooks|testcases|all}
테스트 실행 정보를 숨깁니다.
--hide-execution hooks는 훅을,--hide-execution testcases는 테스트 케이스와 훅을,--hide-execution all은 모든 정보를 숨깁니다.
- --hide-summary
테스트 실행 종료 시 요약을 표시하지 않습니다.
- --report-detailed
실행 중 각 테스트의 자세한 정보를 표시합니다.
- --report-skipped
건너뛴 테스트의 정보를 표시합니다.
--report-detailed와 함께 사용해야 합니다.
빌드와 배포
참고
Ren'Py는 빌드 과정에서 게임을 불러오는 데 필요한 정보가 있는 .rpyc 파일을 생성합니다. 지속적 통합 시스템은 빌드 후 이 파일들을 보존하여 다음 빌드에 직접 제공하거나 old-game 디렉터리에 넣어야 합니다. 그러지 않으면 저장 데이터를 불러올 수 없는 게임이 만들어질 수 있습니다.
call에 from 추가
from 절이 없는 모든 call 문에 이를 추가합니다. 수정된 게임에서도 Ren'Py가 호출의 반환 지점을 찾을 수 있도록 일반적으로 릴리스 전에 수행해야 합니다.
--compile을 함께 적용합니다.
./renpy.sh <basedir> add_from
.\lib\py3-windows-x86_64\python.exe renpy.py <basedir> add_from
경고
게임의 스크립트 파일을 수정합니다.
배포
게임의 Windows, macOS, Linux용 배포판을 빌드합니다.
./renpy.sh launcher distribute <basedir> [options...]
.\lib\py3-windows-x86_64\python.exe renpy.py launcher distribute <basedir> [options...]
- --destination <directory>
배포판을 저장할 디렉터리를 지정합니다. 기본값은 현재 디렉터리 안의 “name-version-dists”이며,
build.name과build.version의 정보를 사용합니다.
- --format <format>
배포판을 지정한 형식으로 강제합니다.
- --macapp <app>
Mac 패키지 서명에 Ren'Py에 포함된 macapp 대신 사용할 macapp의 경로를 지정합니다.
- --no-update
HTTPS/HTTP 업데이터 작동에 필요한 업데이트 파일을 빌드하지 않습니다.
- --package <package>
빌드할 패키지 이름을 지정합니다. "pc", "mac", "markets" 같은 이름입니다. 여러 번 지정하여 여러 패키지를 빌드할 수 있습니다. 기본값은 모든 패키지를 빌드하는 것입니다.
Android 빌드
게임의 Android 배포 버전을 빌드합니다. 런처에서 Android SDK 설치, 키 생성, 프로젝트 구성을 마쳤다고 가정합니다.
./renpy.sh launcher android_build <basedir> [options...]
.\lib\py3-windows-x86_64\python.exe renpy.py launcher android_build <basedir> [options...]
- --destination <directory>
출력물을 저장할 디렉터리를 지정합니다. 기본값은 현재 디렉터리 안의 “name-version-dists”이며,
build.name과build.version의 정보를 사용합니다.
- --bundle
지정하면
.aab번들을 생성합니다. 지정하지 않으면.apk파일을 생성합니다.
- --install
연결된 기기에
.apk또는.aab파일을 설치합니다.
- --package <package>
빌드할 패키지를 지정합니다. 기본값은 'android' 패키지입니다.
iOS 프로젝트 생성
게임의 iOS 버전을 빌드할 수 있는 Xcode 프로젝트를 만듭니다. 런처에서 iOS 지원을 한 번 설치했다고 가정합니다.
./renpy.sh launcher ios_create <basedir> <destination>
.\lib\py3-windows-x86_64\python.exe renpy.py launcher ios_create <basedir> <destination>
- <basedir>
Ren'Py 프로젝트 경로를 지정합니다.
- <destination>
생성할 iOS 프로젝트 경로를 지정합니다.
iOS 프로젝트에 게임 복사
ios_create로 만든 Xcode 프로젝트에 게임을 복사합니다. 같은 Ren'Py 버전으로 만든 프로젝트를 업데이트할 때 사용합니다.
./renpy.sh launcher ios_populate <basedir> <destination>
.\lib\py3-windows-x86_64\python.exe renpy.py launcher ios_populate <basedir> <destination>
- <basedir>
Ren'Py 프로젝트 경로를 지정합니다.
- <destination>
업데이트할 iOS 프로젝트 경로를 지정합니다.
웹 빌드
게임의 웹 배포 버전을 빌드합니다. 런처에서 웹 지원을 설치했고 progressive_download.txt 같은 구성 파일을 준비했다고 가정합니다.
./renpy.sh launcher web_build <basedir> [options...]
.\lib\py3-windows-x86_64\python.exe renpy.py launcher web_build <basedir> [options...]
- --destination <directory>
패키징한 파일을 저장할 디렉터리를 지정합니다.
- --launch
빌드 후 웹 서버를 시작하고 게임을 실행합니다.
번역과 현지화
관련 항목
번역
프로젝트의 tl/<language>에 번역 파일을 생성하거나 업데이트합니다. 기존 번역 항목은 유지하면서 누락된 대사와 문자열 항목을 기록합니다. 파일을 쓰지 않고 누락된 번역 수만 확인하려면 --count를 사용하세요.
./renpy.sh <basedir> translate <language> [options...]
.\lib\py3-windows-x86_64\python.exe renpy.py <basedir> translate <language> [options...]
- <language>
번역을 생성할 언어를 지정합니다.
- --count
파일을 생성하지 않고 누락된 번역 수를 출력합니다.
- --rot13
번역을 생성할 때 rot13을 적용합니다.
- --empty
번역을 생성할 때 빈 문자열을 만듭니다.
--rot13또는--piglatin이 있으면 무시됩니다.
- --min-priority <int>
이 값보다 우선순위가 높은 문자열을 번역합니다.
- --max-priority <int>
- 기본값:
config.translate_launcher가 True이면 499, 아니면 299입니다.
이 값보다 우선순위가 낮은 문자열을 번역합니다.
- --strings-only
대사는 제외하고 문자열만 번역합니다.
- --common-only
공통 코드의 문자열만 번역합니다.
- --no-todo
생성한 번역 파일의 맨 위에 TODO 표시를 넣지 않습니다.
- --string <string>
특정 문자열을 번역합니다. 여러 번 지정하여 여러 문자열을 번역할 수 있습니다.
대사
대사와 선택적으로 번역 가능한 문자열을 내보냅니다. 기본 출력은 dialogue.tab이며, --text를 사용하면 dialogue.txt입니다.
언어를 제공하면 번역이 있는 항목은 번역문을 출력합니다. 그렇지 않으면 원문을 출력합니다.
./renpy.sh <basedir> dialogue <language> [options...]
.\lib\py3-windows-x86_64\python.exe renpy.py <basedir> dialogue <language> [options...]
참고
내보내기 및 보고용 명령입니다. tl/<language> 번역 스크립트 파일을 생성하지 않습니다.
- <language>
대사를 추출할 언어를 지정합니다.
- --text
대사를 일반 텍스트로 출력합니다. 지정하지 않으면 탭으로 구분한 파일을 출력합니다.
- --notags
대사에서 텍스트 태그를 제거합니다.
- --escape
따옴표와 기타 특수 문자를 이스케이프합니다.
문자열 추출
게임의 기존 번역을 JSON 파일로 내보냅니다.
./renpy.sh <basedir> extract_strings <language> <destination> [options...]
.\lib\py3-windows-x86_64\python.exe renpy.py <basedir> extract_strings <language> <destination> [options...]
- <language>
번역된 문자열을 추출할 언어를 지정합니다.
- <destination>
번역된 문자열을 저장할 json 파일을 지정합니다.
- --merge
기존 번역을 유지하면서 파일의 현재 내용과 새 내용을 병합합니다.
- --force
해당 언어가 없어도 예외를 발생시키지 않습니다.
문자열 병합
JSON 파일의 번역을 게임으로 다시 가져옵니다.
--compile을 함께 적용합니다.
./renpy.sh <basedir> merge_strings <language> <source> [options...]
.\lib\py3-windows-x86_64\python.exe renpy.py <basedir> merge_strings <language> <source> [options...]
- <language>
번역 문자열을 병합할 대상 언어를 지정합니다.
- <source>
번역 문자열을 가져올 json 파일을 지정합니다.
- --reverse
json 파일의 언어 방향을 뒤집습니다.
- --replace
실질적인 번역도 교체합니다. 실질적인 번역이 아닌 항목은 번역이 없거나 기본 언어와 같은 경우를 말합니다.
런처 명령
다음 명령으로 명령줄에서 Ren'Py 런처를 제어합니다.
GUI 생성
기존 Ren'Py 게임의 GUI를 생성합니다.
./renpy.sh launcher generate_gui <basedir> [options...]
.\lib\py3-windows-x86_64\python.exe renpy.py launcher generate_gui <basedir> [options...]
- --width <width>
- 기본값:
1280
생성할 GUI의 너비를 지정합니다.
- --height <height>
- 기본값:
720
생성할 GUI의 높이를 지정합니다.
- --accent <color>
- 기본값:
#00B8C3
GUI 전반에서 사용할 강조 색을 지정합니다.
- --boring <color>
- 기본값:
#000000
GUI 배경에 사용할 차분한 색을 지정합니다.
- --light
밝은 테마로 처리합니다.
- --template <directory>
- 기본값:
"gui"
소스 코드가 있는 템플릿 디렉터리를 지정합니다.
- --language <language>
- 기본값:
None
문자열과 주석을 번역할 언어를 지정합니다.
- --start
이미지와 코드를 교체하여 새 프로젝트를 시작합니다.
- --replace-images
기존 이미지를 덮어씁니다.
- --replace-code
기존 gui.rpy 파일을 덮어씁니다.
- --update-code
기존 gui.rpy 파일을 업데이트합니다.
- --minimal
option.rpy와 번역만 업데이트합니다.
GUI 이미지
GUI 변수를 기준으로 버튼, 바, 라디오 버튼 등의 이미지를 생성합니다.
./renpy.sh launcher gui_images <basedir> [options...]
.\lib\py3-windows-x86_64\python.exe renpy.py launcher gui_images <basedir> [options...]
프로젝트 디렉터리 확인
Ren'Py 런처가 프로젝트 저장에 사용하는 디렉터리를 출력합니다.
./renpy.sh launcher get_projects_directory
.\lib\py3-windows-x86_64\python.exe renpy.py launcher get_projects_directory
프로젝트 디렉터리 설정
Ren'Py 런처가 프로젝트 저장에 사용하는 디렉터리를 설정합니다. 프로젝트 디렉터리를 선택하는 수단을 전혀 사용할 수 없는 최소 환경의 시스템을 위한 기능입니다.
런처가 실행 중이지 않을 때만 사용할 수 있습니다.
./renpy.sh launcher set_projects_directory <projects>
.\lib\py3-windows-x86_64\python.exe renpy.py launcher set_projects_directory <projects>
- <projects>
프로젝트 디렉터리 경로를 지정합니다.
프로젝트 설정
지정한 프로젝트를 현재 프로젝트로 설정합니다. 이를 위해 런처의 프로젝트 디렉터리와 현재 선택된 프로젝트를 변경합니다.
런처가 실행 중이지 않을 때만 사용할 수 있습니다.
./renpy.sh launcher set_project <project>
.\lib\py3-windows-x86_64\python.exe renpy.py launcher set_project <project>
- <project>
선택할 프로젝트의 전체 경로를 지정합니다.
old-game 업데이트
<basedir>/game의 .rpyc 파일을 <basedir>/old-game으로 복사합니다.
./renpy.sh launcher update_old_game <basedir>
.\lib\py3-windows-x86_64\python.exe renpy.py launcher update_old_game <basedir>
관련 항목
사용자 정의 명령
위 명령 외에도 renpy.arguments.register_command()로 특정 프로젝트만의 명령을 만들 수 있습니다.
명령을 실행하면 먼저 게임이 초기화된 뒤 명령이 실행됩니다.
- renpy.arguments.register_command(name, function, uses_display=False)
Ren'Py를 명령줄에서 실행할 때 호출할 수 있는 명령을 등록합니다. 명령 실행 시 function을 인수 없이 호출합니다.
- name
- 자료형:
str
인터페이스에서 사용할 명령 이름을 지정합니다.
- function
- 자료형:
function
명령 실행 시 호출할 함수를 지정합니다. function은 인수 없이 호출됩니다.
function에 추가 명령줄 인수가 필요하면
renpy.arguments.ArgumentParser를 생성하고 그 객체의parse_args()를 호출해야 합니다. 그렇지 않으면renpy.arguments.takes_no_arguments()를 호출해야 합니다.function이 True를 반환하면 Ren'Py 시작 절차를 정상적으로 계속합니다. 그 밖의 경우에는
function()이 반환되면 Ren'Py를 종료합니다.관련 항목
명령줄 구문 분석에 관한 자세한 내용은 ArgumentParser 문서를 참조하세요.
- uses_display
- 자료형:
bool
True이면 디스플레이를 초기화합니다. False이면 더미 비디오 및 오디오 드라이버를 사용합니다.
예제
init python:
def compute_area_command():
ap = renpy.arguments.ArgumentParser(description='Compute the area of various shapes.')
ap.add_argument("dimensions", nargs="*", type=float, help="The dimension of the shape.")
ap.add_argument("--square", action="store_true", help="If given, compute the area as a square.")
ap.add_argument("--rectangle", action="store_true", help="If given, compute the area as a rectangle.")
ap.add_argument("--circle", action="store_true", help="If given, compute the area as a circle.")
args = ap.parse_args()
if args.square:
print(f"Square: {args.dimensions[0] ** 2}")
elif args.rectangle:
print(f"Rectangle: {args.dimensions[0] * args.dimensions[1]}")
elif args.circle:
print(f"Circle: {3.14 * args.dimensions[0] ** 2}")
# Terminate and do not run Ren'Py normally
return False
renpy.arguments.register_command("compute_area", compute_area_command)
그런 다음 명령을 다음과 같이 호출할 수 있습니다.
> ./renpy.sh <basedir> compute_area 3 --square
Square: 9.0
> ./renpy.sh <basedir> compute_area 3 2 --rectangle
Rectangle: 6.0
> ./renpy.sh <basedir> compute_area 1 --circle
Circle: 3.14
> ./renpy.sh <basedir> compute_area --help
> .\lib\py3-windows-x86_64\python.exe renpy.py basedir compute_area 3 --square
Square: 9.0
> .\lib\py3-windows-x86_64\python.exe renpy.py basedir compute_area 3 2 --rectangle
Rectangle: 6.0
> .\lib\py3-windows-x86_64\python.exe renpy.py basedir compute_area 1 --circle
Circle: 3.14
> .\lib\py3-windows-x86_64\python.exe renpy.py basedir compute_area --help