명령줄 인터페이스

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

배포판 빌드

런처 도구로 데스크톱 배포판(Windows/macOS/Linux)을 빌드합니다.

cd /path/to/renpy
./renpy.sh launcher distribute /path/to/project --destination /path/to/output

번역 생성 및 업데이트

번역 파일을 생성하거나 업데이트한 뒤 번역자에게 전달할 대사와 문자열을 내보냅니다.

cd /path/to/renpy
./renpy.sh /path/to/project translate french
./renpy.sh /path/to/project dialogue french --strings

구문

참고

이 페이지에서 사용하는 표기법은 다음과 같습니다.

  • <name>은 프로젝트 경로나 언어 코드처럼 직접 바꾸어 넣을 값입니다.

  • [item]은 선택 사항이므로 생략할 수 있습니다.

./renpy.sh [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

특정 명령의 최신 옵션을 보려면 다음을 실행하세요.

./renpy.sh <basedir> <command> --help

핵심 작업 명령

프로젝트 실행

현재 프로젝트를 정상적으로 실행합니다. 명령을 지정하지 않으면 실행되는 기본 명령입니다.

./renpy.sh <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

컴파일

게임을 컴파일하여 .rpy 파일로부터 .rpyc 파일을 생성합니다. 런처의 “강제 재컴파일(Force Recompile)” 버튼과 같습니다.

./renpy.sh <basedir> compile [--keep-orphan-rpyc]
--keep-orphan-rpyc

같은 이름의 .rpy 또는 _ren.py 파일과 연결되지 않은 .rpyc 파일을 삭제하지 않도록 합니다.

인터랙티브 디렉터

인터랙티브 디렉터를 시작하고 게임을 실행합니다.

./renpy.sh <basedir> director

영구 데이터 제거

영구 데이터를 삭제합니다. 영구 데이터는 다음 여러 위치에 있으므로 편리하게 사용할 수 있습니다.

./renpy.sh <basedir> rmpersistent

경고

잠금 해제 항목, 읽은 메시지, 환경설정을 포함한 모든 게임 진행 정보가 초기화됩니다.

프로젝트 업데이트

웹 호스트에서 Ren'Py 게임 업데이트를 다운로드하고 설치합니다. 자세한 내용은 HTTPS/HTTP 업데이터를 참조하세요.

매개변수는 updater.update()에서 사용하는 것과 같습니다.

./renpy.sh <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...]
<filename>

지정하면 Lint 보고서를 표준 출력 대신 해당 파일에 기록합니다.

--error-code

Lint 오류가 있으면 오류 코드 1로 종료합니다. CI 시스템에서 Lint 실패를 감지할 때 유용합니다.

--no-orphan-tl

연결이 끊어진 번역을 보고하지 않습니다. 이는 기본 언어의 문자열을 참조하지 않는 번역 문입니다.

--reserved-parameters

Ren'Py 문의 매개변수에 사용한 Ren'Py 또는 Python 예약 이름을 보고합니다.

특히 label, screen, ATL 문을 검사합니다.

--by-character

캐릭터별 블록 수, 단어 수, 문자 수를 보고합니다.

--check-unclosed-tags

닫히지 않은 텍스트 태그를 보고합니다.

--all-problems

종류별로 처음 열 개만 보고하는 대신 모든 문제를 보고합니다.

테스트 케이스 실행

게임의 자동화 테스트를 실행합니다.

예제:
./renpy.sh <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

경고

게임의 스크립트 파일을 수정합니다.

배포

게임의 Windows, macOS, Linux용 배포판을 빌드합니다.

./renpy.sh launcher distribute <basedir> [options...]
--destination <directory>

배포판을 저장할 디렉터리를 지정합니다. 기본값은 현재 디렉터리 안의 “name-version-dists”이며, build.name과 build.version의 정보를 사용합니다.

--format <format>

배포판을 지정한 형식으로 강제합니다.

--macapp <app>

Mac 패키지 서명에 Ren'Py에 포함된 macapp 대신 사용할 macapp의 경로를 지정합니다.

--no-archive

파일을 아카이브에 추가하지 않습니다.

--no-update

HTTPS/HTTP 업데이터 작동에 필요한 업데이트 파일을 빌드하지 않습니다.

--package <package>

빌드할 패키지 이름을 지정합니다. "pc", "mac", "markets" 같은 이름입니다. 여러 번 지정하여 여러 패키지를 빌드할 수 있습니다. 기본값은 모든 패키지를 빌드하는 것입니다.

--packagedest <package>

패키지의 출력 이름을 확장자 없이 지정합니다. --package를 정확히 하나만 지정해야 합니다.

Android 빌드

게임의 Android 배포 버전을 빌드합니다. 런처에서 Android SDK 설치, 키 생성, 프로젝트 구성을 마쳤다고 가정합니다.

./renpy.sh launcher android_build <basedir> [options...]
--destination <directory>

출력물을 저장할 디렉터리를 지정합니다. 기본값은 현재 디렉터리 안의 “name-version-dists”이며, build.name과 build.version의 정보를 사용합니다.

--bundle

지정하면 .aab 번들을 생성합니다. 지정하지 않으면 .apk 파일을 생성합니다.

--install

연결된 기기에 .apk 또는 .aab 파일을 설치합니다.

--launch

연결된 기기에서 게임을 실행합니다. --install을 함께 적용합니다.

--package <package>

빌드할 패키지를 지정합니다. 기본값은 'android' 패키지입니다.

iOS 프로젝트 생성

게임의 iOS 버전을 빌드할 수 있는 Xcode 프로젝트를 만듭니다. 런처에서 iOS 지원을 한 번 설치했다고 가정합니다.

./renpy.sh launcher ios_create <basedir> <destination>
<basedir>

Ren'Py 프로젝트 경로를 지정합니다.

<destination>

생성할 iOS 프로젝트 경로를 지정합니다.

iOS 프로젝트에 게임 복사

ios_create로 만든 Xcode 프로젝트에 게임을 복사합니다. 같은 Ren'Py 버전으로 만든 프로젝트를 업데이트할 때 사용합니다.

./renpy.sh launcher ios_populate <basedir> <destination>
<basedir>

Ren'Py 프로젝트 경로를 지정합니다.

<destination>

업데이트할 iOS 프로젝트 경로를 지정합니다.

웹 빌드

게임의 웹 배포 버전을 빌드합니다. 런처에서 웹 지원을 설치했고 progressive_download.txt 같은 구성 파일을 준비했다고 가정합니다.

./renpy.sh launcher web_build <basedir> [options...]
--destination <directory>

패키징한 파일을 저장할 디렉터리를 지정합니다.

--launch

빌드 후 웹 서버를 시작하고 게임을 실행합니다.

번역과 현지화

관련 항목

번역

프로젝트의 tl/<language>에 번역 파일을 생성하거나 업데이트합니다. 기존 번역 항목은 유지하면서 누락된 대사와 문자열 항목을 기록합니다. 파일을 쓰지 않고 누락된 번역 수만 확인하려면 --count를 사용하세요.

./renpy.sh <basedir> translate <language> [options...]
<language>

번역을 생성할 언어를 지정합니다.

--count

파일을 생성하지 않고 누락된 번역 수를 출력합니다.

--rot13

번역을 생성할 때 rot13을 적용합니다.

--piglatin

번역을 생성할 때 피그 라틴을 적용합니다. --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...]

참고

내보내기 및 보고용 명령입니다. tl/<language> 번역 스크립트 파일을 생성하지 않습니다.

<language>

대사를 추출할 언어를 지정합니다.

--text

대사를 일반 텍스트로 출력합니다. 지정하지 않으면 탭으로 구분한 파일을 출력합니다.

--strings

대사뿐 아니라 모든 번역 가능한 문자열을 출력합니다.

대부분은 _() 및 __() 함수나 메뉴 선택지로 정의됩니다.

--notags

대사에서 텍스트 태그를 제거합니다.

--escape

따옴표와 기타 특수 문자를 이스케이프합니다.

문자열 추출

게임의 기존 번역을 JSON 파일로 내보냅니다.

./renpy.sh <basedir> extract_strings <language> <destination> [options...]
<language>

번역된 문자열을 추출할 언어를 지정합니다.

<destination>

번역된 문자열을 저장할 json 파일을 지정합니다.

--merge

기존 번역을 유지하면서 파일의 현재 내용과 새 내용을 병합합니다.

--force

해당 언어가 없어도 예외를 발생시키지 않습니다.

문자열 병합

JSON 파일의 번역을 게임으로 다시 가져옵니다.

--compile을 함께 적용합니다.

./renpy.sh <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...]
--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...]

프로젝트 디렉터리 확인

Ren'Py 런처가 프로젝트 저장에 사용하는 디렉터리를 출력합니다.

./renpy.sh launcher get_projects_directory

프로젝트 디렉터리 설정

Ren'Py 런처가 프로젝트 저장에 사용하는 디렉터리를 설정합니다. 프로젝트 디렉터리를 선택하는 수단을 전혀 사용할 수 없는 최소 환경의 시스템을 위한 기능입니다.

런처가 실행 중이지 않을 때만 사용할 수 있습니다.

./renpy.sh launcher set_projects_directory <projects>
<projects>

프로젝트 디렉터리 경로를 지정합니다.

프로젝트 설정

지정한 프로젝트를 현재 프로젝트로 설정합니다. 이를 위해 런처의 프로젝트 디렉터리와 현재 선택된 프로젝트를 변경합니다.

런처가 실행 중이지 않을 때만 사용할 수 있습니다.

./renpy.sh launcher set_project <project>
<project>

선택할 프로젝트의 전체 경로를 지정합니다.

old-game 업데이트

<basedir>/game의 .rpyc 파일을 <basedir>/old-game으로 복사합니다.

./renpy.sh 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