MakefileをPythonプロジェクトに追加する理由


物語



「怠惰な人は、それをする簡単な方法を見つけます.」そばBill Gates そして、彼が怠惰な人々に言及したとき、彼も私を同じプールに含めました.あなたは自分自身に尋ねることができる、なぜ私は自分自身について言います.理由は、私が何度も何度も同じことをしているのを発見した時です.そして、あなたがそれを意識していないかもしれない前に、あなたはその繰り返しループに巻き込まれたことを確信しています.
新しいPythonや関連プロジェクトを作成し、作業するとき、私は何度も何度も同じことを繰り返していることに気づくでしょう.
例えば、
  • Python仮想環境を作成し、必要なパッケージをすべてインストールし、Pythonバイトコードやその他のアーティファクトを掃除します.virtualenv .venv && source .venv/bin/activate && pip install .
  • 私が開発するか、押す前に、コード・プリンタとフォーマッタを走らせてくださいGitHub . black -l 90 && isort -rc . && flake8 .
  • unittestを実行し、(もしあれば)ドキュメントを生成する.pytest -sv . && sphinx-apidoc . -o ./docs -f tests
  • 私が上記で示したすべての例では、シェルコマンドを実行するためにシェルコマンドを知っています.
    エンターGNU-Make , このポストでは、私はあなたの使用を活用する方法を示しますMakefile 自動化のため、すべてのグッズを確保する1つの場所に配置され、すべてのシェルコマンドを暗記する必要はありません.

    TLドクター


    を使用して任意のプログラミングプロジェクトを構築するMakefile '退屈な仕事のs.

    方法


    以下はジェネリックの例ですMakefile 私は使っている.私は通常、私が必要としない部分を削除し、それを私のプロジェクトの根元に置きます.
    < div >

    ウォークスルー


    実行中のmake 任意のターゲットを使用せずに詳細な使用方法を生成します.私はその中を通らないMakefile それは十分に文書化されていて、自己説明的ですbr/>
    <> P >
    クラスをハイライト表示する
    $ 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)
    
    < div >


    プロジェクトの一つhere 例があります.br/>
    <> P >
    クラスをハイライト表示する
    make run-bootstrap
    
    < div >
    < tt >上記のコマンドを実行すると、< p/p >
    <ウル>
  • ユーザーと現在の作業ディレクトリに基づいてDockerイメージをビルドします.EG :mmphego/face_detection
  • OpenVinoが推論のために使うモデルをダウンロードしてください.
  • 現在のホスト名/ユーザ名をX/グラフィカルサーバへの接続を許可するリストに追加します.
  • プリビルドされたDocker画像内のアプリケーションを実行します.
  • < ull >
    < P >


    < hr/>
    さらにあなたの学習:< p/p >
    <ウル>
  • Getting started with makefile
  • Makefiles: A tutorial by example
  • GNU Make: Book
  • < ull >
    あなたがこのポストに何かについて役に立つか、わからないとわかるならば、コメントを残してください

    リファレンス


    この投稿は以下のような記事に触発されました.
    <ウル>
  • Makefiles in python projects
  • Makefile with Python
  • < ull >