[Python] argparse 톺아보기

YJ·2024년 10월 15일
2
post-thumbnail

💡 도움이 되셨다면 ♡와 팔로우 부탁드립니다. 미리 감사드립니다.

톺아보기는 '샅샅이 더듬어 가면서 살피다'라는 뜻의 순우리말입니다.

argparse 라이브러리 사용법

argparse란?

argparse는 Python에서 명령줄 인자를 처리하는 표준 라이브러리다. 명령줄에서 인자를 받아 프로그램의 동작을 제어할 수 있다.

import argparse

# ArgumentParser 객체 생성
parser = argparse.ArgumentParser(description="Simple Argument Parser Example")

# 명령줄 인자 추가
parser.add_argument('--name', type=str, help='Your name')
parser.add_argument('--age', type=int, help='Your age')

# 인자 파싱
args = parser.parse_args()

# 인자 값 사용
print(f"Hello {args.name}, you are {args.age} years old!")

실행 예시:

$ python script.py --name "Alex" --age 25
Hello Alex, you are 25 years old!

필수 인자와 선택적 인자

필수 인자

  • 필수 인자는 프로그램이 실행될 때 반드시 제공해야 하는 인자다. add_argument() 함수에서 인자의 이름만 명시하면 이를 필수 인자로 정의할 수 있다.
parser.add_argument('file', type=str, help='File to process')  # 필수 인자
args = parser.parse_args()
print(f"Processing file: {args.file}")
  • type: 데이터 타입을 지정한다. int, float, str 등 인자의 데이터 유형을 지정하여 잘못된 유형의 값이 들어오면 자동으로 오류를 발생시킨다. 예를 들어, type=int로 설정하면 인자가 정수로 입력되어야 하며, 다른 유형이 들어오면 프로그램이 실패한다.
  • help: 인자가 무엇을 의미하는지 설명하는 문자열로, 명령줄에서 -help 옵션을 사용할 때 출력된다.

실행 예시:

$ python script.py data.txt
Processing file: data.txt

선택적 인자

선택적 인자는 프로그램 실행 시 제공되지 않으면 기본값을 적용할 수 있다. 선택적 인자는 -- 또는 -로 시작하는 이름을 부여해서 정의할 수 있다.

parser.add_argument('--verbose', action='store_true', help='Enable verbose output')  # 선택적 인자
args = parser.parse_args()

if args.verbose:
    print("Verbose mode is enabled.")
  • action='store_true': 플래그(flag)처럼 작동하는 파라미터다. 인자가 명령줄에 포함되면 True로 설정되고, 포함되지 않으면 False가 된다. 주로 기능을 활성화하거나 비활성화할 때 사용된다.

실행 예시:

$ python script.py --verbose
Verbose mode is enabled.

args 객체에 인자 추가하기

  • parse_args() 이후 args 객체에 동적으로 새로운 인자를 추가할 수 있다. 이 방법은 파싱 이후에 변수를 처리할 때 유용하다.
# 명령줄 인자 추가
parser.add_argument('--name', type=str, help='Your name')
args = parser.parse_args()

# 명령줄 인자를 받은 후 여러 동적 변수 추가
args.age = 25  # 나이를 추가
args.location = 'Seoul'  # 위치 정보를 추가
args.is_student = True  # 학생 여부 추가

print(f"Name: {args.name}")
print(f"Age: {args.age}")
print(f"Location: {args.location}")
print(f"Is Student: {args.is_student}")

기본값 설정하기

  • 선택적 인자에 기본값을 설정할 수 있다. 기본값은 인자가 명령줄에서 제공되지 않았을 때 자동으로 사용된다.
parser.add_argument('--level', type=int, default=1, help='Set the level (default: 1)')
args = parser.parse_args()
print(f"Level set to {args.level}")
  • default: 인자가 명령줄에서 제공되지 않았을 때 사용할 기본값을 지정한다. 이를 통해 사용자가 인자를 생략할 때도 프로그램이 정상적으로 작동하도록 설정할 수 있다.

실행 예시:

$ python script.py
Level set to 1

$ python script.py --level 5
Level set to 5

하이퍼파라미터 설정에 활용하기

  • argparse는 머신러닝 및 딥러닝 모델에서 하이퍼파라미터를 설정할 때 매우 유용하다. 명령줄에서 학습률, 배치 크기 등의 값을 쉽게 설정할 수 있다.
parser.add_argument('--learning_rate', type=float, default=0.001, help='Learning rate for training')
parser.add_argument('--batch_size', type=int, default=32, help='Batch size for training')
args = parser.parse_args()

print(f"Training with learning rate {args.learning_rate} and batch size {args.batch_size}")
  • type: 인자의 데이터 타입을 정의한다. 학습률은 실수(float), 배치 크기는 정수(int)로 정의해야 한다. 잘못된 타입의 입력을 자동으로 걸러준다.

실행 예시:

$ python train.py --learning_rate 0.01 --batch_size 64
Training with learning rate 0.01 and batch size 64

인자 그룹화하기

  • 관련된 인자들을 그룹으로 묶어 가독성을 높일 수 있다.
group = parser.add_argument_group('Model Parameters')
group.add_argument('--epochs', type=int, default=10, help='Number of epochs for training')
group.add_argument('--dropout', type=float, default=0.5, help='Dropout rate')

args = parser.parse_args()
print(f"Training for {args.epochs} epochs with {args.dropout} dropout")
  • add_argument_group(): 인자들을 그룹화하여 프로그램의 구조를 더 명확하게 보여준다. 여러 인자가 서로 관련이 있을 때 유용하다.

help 호출

  • 인자를 그룹화하면 help 메시지에서 관련된 인자들이 함께 묶여서 표시되고, 가독성이 좋아진다.
$ python script.py --help
usage: script.py [-h] [--epochs EPOCHS] [--dropout DROPOUT] [--learning_rate LEARNING_RATE]

optional arguments:
  -h, --help            show this help message and exit
  --learning_rate LEARNING_RATE
                        Learning rate for training

Model Parameters:
  --epochs EPOCHS       Number of epochs for training
  --dropout DROPOUT     Dropout rate for training

서브 명령 만들기

  • 서브 명령을 사용하면 하나의 프로그램에서 여러 명령을 처리할 수 있다. 예를 들어, 모델을 학습하거나 평가하는 명령을 하나의 스크립트에서 구현할 수 있다.
subparsers = parser.add_subparsers(dest='command')

# 'train' 명령 서브 파서
train_parser = subparsers.add_parser('train', help='Train the model')
train_parser.add_argument('--data', type=str, help='Training data path')

# 'evaluate' 명령 서브 파서
eval_parser = subparsers.add_parser('evaluate', help='Evaluate the model')
eval_parser.add_argument('--model', type=str, help='Model path for evaluation')

args = parser.parse_args()

if args.command == 'train':
    print(f"Training with data: {args.data}")
elif args.command == 'evaluate':
    print(f"Evaluating model: {args.model}")
  • dest: 서브 명령의 이름을 저장할 변수의 이름이다.
  • add_subparsers(): 프로그램에 여러 서브 명령을 추가할 때 사용된다. 이를 통해 하나의 스크립트에서 여러 작업을 처리할 수 있다.
  • add_parser(): 각 서브 명령에 대한 파서를 추가한다. 각 명령은 고유의 인자를 가질 수 있다.

실행 예시:

$ python script.py train --data train_data.csv
Training with data: train_data.csv

$ python script.py evaluate --model model.h5
Evaluating model: model.h5

정리

argparse는 Python에서 명령줄 인자를 손쉽게 처리할 수 있는 강력한 도구다. 이를 통해 프로그램을 실행할 때마다 여러 인자를 명령줄에서 받아들여, 코드의 유연성과 재사용성을 높일 수 있다. 특히 머신러닝이나 딥러닝에서 하이퍼파라미터(예: 학습률, 배치 크기, 에포크 수 등)를 설정할 때 매우 유용하다. 모델을 학습하거나 평가하는 과정에서 하이퍼파라미터를 자주 변경해야 할 때, 명령줄 인자를 통해 손쉽게 다양한 설정을 변경할 수 있어, 모델 실험의 효율성을 크게 향상시킬 수 있다.

profile
제 글이 유익하셨다면 ♡와 팔로우로 응원 부탁드립니다.

0개의 댓글

관련 채용 정보