[Coding] Argparse에 대해 알아보기

Dokyeong Kwon·2020년 12월 21일

Pytorch

목록 보기
2/2
post-thumbnail

파이썬의 argparse 사용법에 대해 정리해보고자 합니다! 😊 딥러닝 코드를 구현하다보니 더 다양한 기능들이나, 옵션들에 대해 알고싶어서 정리해보았습니다 😒

깃허브에서 딥러닝 코드들을 보다보면, 아래와 같은 실행 옵션을 많이 확인할 수 있습니다.

python train.py train --epochs 100 --batch-size 10 --plot-every=100

이런 옵션들은 대부분 주어진 소스를 실행하기 위해 필요한 다양한 옵션 (ex. 데이터 경로, 배치 사이즈 등) 을 선택하도록 도와줍니다. 파이썬에서 이런 옵션에 관한 라이브러리가 바로 argparse 입니다! 오늘은 argparse를 어떻게 사용하는지 간단한 예시와 함께 살펴보고자 합니다.

argparse 사용법

  1. Import
import argparse

우선, argparse를 사용하려면 위의 코드와 같이 import를 해주면 됩니다. 👍

  1. Initialization
# Create Argparse Instance
parser = argparse.ArgumentParser(description='Argparse Study')

이제, argparse를 사용할 수 있습니다. parser를 위의 코드와 같이 만들어줍니다. description에는 실행하고자 하는 스크립트의 설명을 작성해줄 수 있습니다.

  • ArgumentParser의 parameter

    prog - 프로그램의 이름 (기본값: sys.argv[0])

    usage - 프로그램 사용법을 설명하는 문자열 (기본값: 파서에 추가된 인자로부터 만들어지는 값)

    description - 인자 도움말 전에 표시할 텍스트 (기본값: none)

    epilog - 인자 도움말 후에 표시할 텍스트 (기본값: none)

    parents - ArgumentParser 객체들의 리스트이고, 이 들의 인자들도 포함된다

    formatter_class - 도움말 출력을 사용자 정의하기 위한 클래스

    prefix_chars - 선택 인자 앞에 붙는 문자 집합 (기본값: 〈-〈).

    fromfile_prefix_chars - 추가 인자를 읽어야 하는 파일 앞에 붙는 문자 집합 (기본값: None).

    argument_default - 인자의 전역 기본값 (기본값: None)

    conflict_handler - 충돌하는 선택 사항을 해결하기 위한 전략 (일반적으로 불필요함)

    add_help - 파서에 h/--help 옵션을 추가합니다 (기본값: True)

    allow_abbrev - 약어가 모호하지 않으면 긴 옵션을 축약할 수 있도록 합니다. (기본값: True)

  1. Add Argument
# Add Argument Value
parser.add_argument('--cpu', action='store_true', help='enables CUDA training')
parser.add_argument('--n_GPUs', type=int, default=0, help='number of GPUs')
parser.add_argument('--epochs', type=int, default=100, help='number of epochs to train')
parser.add_argument('--batch_size', type=int, default=8, help='input batch size for training')
parser.add_argument('--lr', type=float, default=1e-4, help='learning rate')

예를 들어 위의 코드와 같이 argument를 추가할 수 있습니다. add_argument 에는 이름을 '—x' 와 같이 지정해주고, 해당 argument의 type, default 값, action등을 지정해줄 수 있습니다.

  • add_argument의 parameter

    name or flags - 옵션 문자열의 이름이나 리스트, 예를 들어 foo 또는 f, --foo.

👏 foo 는 위치 인자, -foo 는 선택 인자라고 한다.

action - 명령행에서 이 인자가 발견될 때 수행 할 액션의 기본형.

👏 기본 옵션은 store 로, 인자 값을 저장한다. 기본 옵션 외의 제공 되는 액션은 다음과 같다.

  • 추가 Action
    store_const : const=x 로 지정된 값을 저장한다.
    store_true / store_false : True나 False 값을 저장한다.
    append : 리스트를 저장하고, 각 인자 값을 리스트에 추가한다.
    append_const : 리스트를 저장하고, const 키워드 인자로 지정된 값을 리스트에 추가한다. (여러 개의 인자가 같은 리스트에 상수를 저장해야 할 때 유용하다.)
    count : 키워드 인자가 등장한 횟수를 계산한다.

    nargs - 소비되어야 하는 명령행 인자의 수.

👏 다른 수의 명령행 인자를 하나의 액션으로 연결.

const - 일부 action 및 nargs 를 선택할 때 필요한 상숫값.

default - 인자가 명령행에 없는 경우 생성되는 값.

👏 default 키워드 인자의 기본 값은 None 이다. 선택 인자의 경우, 옵션 문자열이 명령행에 없을 때 default 값이 실행된다. type 변환 인자를 적용한다!

type - 명령행 인자가 변환되어야 할 형.

👏 필요한 형 검사와 형 변환이 수행되도록 한다. (ex. float, int, str, bool) 특히, argparse.FileType('w') 는 쓰기 가능한 파일을 만들어준다.

choices - 인자로 허용되는 값의 컨테이너.

required - 명령행 옵션을 생략 할 수 있는지 아닌지 (선택적일 때만).

help - 인자가 하는 일에 대한 간단한 설명.

metavar - 사용 메시지에 사용되는 인자의 이름.

dest - [parse_args()] 가 반환하는 객체에 추가될 어트리뷰트의 이름.

  1. Useage
args = parser.parse_args() # Namespace

필요한 argument들을 이용하기 위해선 위의 argument들을 파싱해주어야합니다. parse_args 함수를 이용해 파싱을 할 수 있습니다.

print(args)

입력한 argument들을 확인할때에는 print 함수를 이용해도 됩니다.

혹은, 아래의 사진과 같이 Terminal에서 직접 확인할수도 있습니다.

다양한 argument들이 어떤 의미인지 확인할때에는 -h, -help 명령어를 사용할수도 있습니다.

참고

https://docs.python.org/ko/3.7/library/argparse.html

profile
Go with the flow

0개의 댓글