일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- PYTHON
- scRNAseq
- single cell
- MACS2
- github
- EdgeR
- js
- Batch effect
- ChIPseq
- CUT&RUN
- javascript
- Bioinformatics
- drug muggers
- CSS
- DataFrame
- matplotlib
- cellranger
- Git
- drug development
- CUTandRUN
- 싱글셀 분석
- single cell analysis
- HTML
- python matplotlib
- scRNAseq analysis
- 비타민 C
- single cell rnaseq
- pandas
- julia
- ngs
Archives
- Today
- Total
바이오 대표
[py.click] click pakage로 python package 만들기 본문
Python package “Click: command line interface creation kit“
Click 패키지는 command line interfaces를 이쁘게 작성할 수 있게 도와주는 툴이다. 또한 CLI API 에서 생기는 문제들을 예방하고 보다 빠르고 재미있게 코드를 짤수있도록 도와주고 크게 3가지 장점이 있다.
- arbitrary nesting of commands
- help page 를 자동생성
- supports lazy loading of subcommands at runtime
# test.py 코드
import click
@click.command()
@click.option('--count', default=1, help='Number of greetings.') # help='' 에 작성하는 메세지가 --help에 뜬다.
@click.option('--name', prompt='Your name', # 코드를 실행하면 'Your name:' 메세지가 뜬다. 이름 입력후, function process.
help='The person to greet.')
def hello(count, name):
"""Simple program that greets NAME for a total of COUNT times.""" # 해당 메세지가 --help 에 뜬다.
for x in range(count):
click.echo(f"Hello {name}!")
if __name__ == '__main__':
hello()
# test.py 실행
$ python test.py --count=3
Your name: bro # 위의 코드를 치면 Your name: 에 이름 넣어줄 수 있다.
Hello bro!
Hello bro!
Hello bro!
$ python test.py --help
Simple program that greets NAME for a total of COUNT times.
Options:
--count INTEGER Number of greetings.
--name TEXT The person to greet.
--help Show this message and exit.
실제 모듈 만들기 + Details
Step 0. 가상환경 실행
# $ pip install virtualenv --user
$ virtualenv venv # -> directory 'venv' generated
$ . venv/bin/activate
$ pip install click
Step 1. Setup.py 설정 및 스크립트 작성
from setuptools import setup
setup(
name='helloword',
version='1.0',
py_module=['hello'], # hello 로 부를 수 있는 모듈을 만드는 것.
install_requires=[
'Click',
],
entry_points="""
[console_scripts]
hello=hello:cli # hello 에서 cli 라는 function 실행
"""
)
import click
@click.command()
@click.option('--repeat', default=1, #click.option() 은 - or --로 시작해야한다.
help="How many times you should be greeted")
@click.option('--string', default="World",
help="This is the thing that is greeted")
@click.argument('out', type=click.File("w"), default="-", required=False) # defulat는 mandantory 이고, input 그대로 유지, , help 만들수 없다(애초에 very specific)
def cli(string, repeat,out):
"""This scripts greets you."""
for x in range(repeat):
click.echo(f'Hello {string}!', file=out) # click function 사용할때는 print(f'Hello {string}!') 말고 echo 추천
if __name__ == '__main__':
cli()
Step 2. 모듈 만들기
pip install --editable .
# -e, --editable Install a project in editable mode (i.e. setuptools "develop mode") from a local project path or a VCS url.
Step 3. 모듈 실행
$ hello --string help
다른 function 추가
- @click.group()
import click
@click.group()
def cli():
pass
@cli.command()
@click.option('--repeat', default=1, #click.option() 은 - or --로 시작해야한다.
help="How many times you should be greeted")
@click.option('--string', default="World",
help="This is the thing that is greeted")
@click.argument('out', type=click.File("w"), default="-", required=False) # defulat는 mandantory 이고, input 그대로 유지, , help 만들수 없다(애초에 very specific)
def say(string, repeat,out):
"""This scripts greets you."""
# click.echo(out)
for x in range(repeat):
click.echo(f'Hello {string}!', file=out) # file= 파일 열고 write 해줌, cli사용시 print()말고 echo 추천
if __name__ == '__main__':
cli()
$ python hello_group.py
Usage: hello.py [OPTIONS] COMMAND [ARGS]...
Options:
--help Show this message and exit.
Commands:
say This scripts greets you. # say라는 command function 을 부를 수 있다.
$ python hello_group.py say --help
Usage: hello.py say [OPTIONS] [OUT]
This scripts greets you.
Options:
--repeat INTEGER How many times you should be greeted
--string TEXT This is the thing that is greeted
--help Show this message and exit.
other Reference
argparse vs click? https://click.palletsprojects.com/en/8.1.x/
'Python > others' 카테고리의 다른 글
[ Algorithm ] Recursion 재귀 Algorithm (0) | 2022.03.06 |
---|---|
[ Python ] 교차 검증 (Cross Validation) - sklearn.Kfold (0) | 2022.02.15 |
[ sys ] python 으로 object 의 메모리 크기 알아내기 - getsizeof( ) (0) | 2022.02.10 |