Python 프로젝트에 Makefile을 추가해야 하는 이유
이야기
"어려운 일을 하기 위해 게으른 사람을 선택한다. 게으른 사람이 쉬운 길을 찾을 것이기 때문이다."라는 말이 있습니다. 작성자: Bill Gates 그가 게으른 사람들을 언급했을 때 저 역시 같은 풀에 포함시킨 것 같습니다. 스스로에게 물어볼 수 있습니다. 왜 내가 나 자신에 대해 그렇게 말하고 있습니까? 그 이유는 시간이 지남에 따라 나는 같은 일을 계속해서 반복하고 있다는 것을 알게 되었고, 당신도 깨닫지 못할 수도 있기 전에 그 반복적인 루프에 빠져들었을 것이라고 확신합니다.
새로운 파이썬이나 관련 프로젝트를 만들고 작업할 때, 저는 같은 일을 계속해서 반복하는 제 자신을 발견할 것입니다.
예를 들어:
virtualenv .venv && source .venv/bin/activate && pip install .
black -l 90 && isort -rc . && flake8 .
pytest -sv . && sphinx-apidoc . -o ./docs -f tests
위에 나열한 모든 예는 실행할 쉘 명령이 무엇인지 알고 있으며 대부분의 경우 주니어에게는 이것이 번거롭거나 지루할 수 있다고 가정합니다.
Enter GNU-Make , 이 게시물에서는 자동화를 위해
Makefile
를 활용하여 모든 장점을 한 곳에 배치하고 모든 셸 명령을 기억할 필요가 없도록 하는 방법을 보여줍니다.TL; DR
지루한 작업을 위해
Makefile
의 사용을 활용하는 프로그래밍 프로젝트를 빌드할 때.방법
아래는 제가 사용하고 있는 일반Makefile
의 예입니다. 저는 보통 필요하지 않은 부분을 제거한 다음 프로젝트의 루트에 배치합니다.
연습
대상 없이 make
를 실행하면 자세한 사용법 문서가 생성됩니다. Makefile
는 잘 문서화되어 있고 설명이 필요하므로 다루지 않겠습니다.
$ make
python3 -c "$PRINT_HELP_PYSCRIPT" < Makefile
Please use `make <target>` where <target> is one of
build-image Build docker image from local Dockerfile.
build-cached-image Build cached docker image from local Dockerfile.
bootstrap Installs development packages, hooks and generate docs for development
dist Builds source and wheel package
dev Install the package in development mode including all dependencies
dev-venv Install the package in development mode including all dependencies inside a virtualenv (container).
install Check if package exist, if not install the package
venv Create virtualenv environment on local directory.
run-in-docker Run example in a docker container
clean Remove all build, test, coverage and Python artefacts
clean-build Remove build artefacts
clean-docs Remove docs/_build artefacts, except PDF and singlehtml
clean-pyc Remove Python file artefacts
clean-test Remove test and coverage artefacts
clean-docker Remove docker image
lint Check style with `flake8` and `mypy`
checkmake Check Makefile style with `checkmake`
formatter Format style with `black` and sort imports with `isort`
install-hooks Install `pre-commit-hooks` on local directory [see: https://pre-commit.com]
pre-commit Run `pre-commit` on all files
coverage Check code coverage quickly with pytest
coveralls Upload coverage report to coveralls.io
test Run tests quickly with pytest
view-coverage View code coverage
changelog Generate changelog for current repo
complete-docs Generate a complete Sphinx HTML documentation, including API docs.
docs Generate a single Sphinx HTML documentation, with limited API docs.
pdf-doc Generate a Sphinx PDF documentation, with limited including API docs. (Optional)
예시
내 프로젝트 중 하나here에 예가 있습니다.
make run-bootstrap
위 명령을 실행하면 다음이 수행됩니다.
- 사용자 및 현재 작업 디렉토리를 기반으로 도커 이미지를 빌드합니다. 예:
mmphego/face_detection
- OpenVINO가 추론에 사용하는 모델을 다운로드합니다.
- X/그래픽 서버에 연결할 수 있도록 허용된 목록에 현재 호스트 이름/사용자 이름을 추가하고 마지막으로
- 사전 빌드된 도커 이미지 내에서 응용 프로그램을 실행합니다.
<시간/>
추가 학습:
이 게시물이 도움이 되었거나 확실하지 않은 부분이 있으면 댓글을 남기거나 @twitter/mphomphego로 문의하세요.
참조
이 게시물은 아래 게시물에서 영감을 받았습니다.
Reference
이 문제에 관하여(Python 프로젝트에 Makefile을 추가해야 하는 이유), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mmphego/why-you-should-add-makefile-into-your-python-project-20j2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)