Python 프로젝트에 Makefile을 추가해야 하는 이유

6635 단어 makefilepythontips

이야기





"어려운 일을 하기 위해 게으른 사람을 선택한다. 게으른 사람이 쉬운 길을 찾을 것이기 때문이다."라는 말이 있습니다. 작성자: Bill Gates 그가 게으른 사람들을 언급했을 때 저 역시 같은 풀에 포함시킨 것 같습니다. 스스로에게 물어볼 수 있습니다. 왜 내가 나 자신에 대해 그렇게 말하고 있습니까? 그 이유는 시간이 지남에 따라 나는 같은 일을 계속해서 반복하고 있다는 것을 알게 되었고, 당신도 깨닫지 못할 수도 있기 전에 그 반복적인 루프에 빠져들었을 것이라고 확신합니다.

새로운 파이썬이나 관련 프로젝트를 만들고 작업할 때, 저는 같은 일을 계속해서 반복하는 제 자신을 발견할 것입니다.
예를 들어:
  • Python 가상 환경을 만들고 여기에 필요한 모든 패키지를 설치하고 Python 바이트 코드 및 기타 아티팩트를 정리합니다. virtualenv .venv && source .venv/bin/activate && pip install .
  • 개발할 때 또는 GitHub로 푸시하기 전에 코드 린터 및 포맷터를 실행합니다. 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로 문의하세요.



    참조



    이 게시물은 아래 게시물에서 영감을 받았습니다.



    좋은 웹페이지 즐겨찾기