PythonプロジェクトでMakefileを使用するにはどうすればいいですか?

2236 ワード

Pythonは偉大なプログラム言語であり、その簡単な文法は無数のプログラム猿を引きつけた.しかし、Pythonプロジェクトの構築ツールといえば、あまりよくないようで、Pythonコミュニティの欠陥と言える.
今日はMakefileを活用してPythonプロジェクトの構築体験を向上させる方法を紹介します.
MakefileがCコードをコンパイルするために使われているのではないかと不思議に思う人もいるかもしれません.そしてこれはとても古い道具です.
Makeは最もよく使われる構築ツールで、1977年に誕生し、主にC言語のプロジェクトに使われています.しかし、実際には、ファイルが変化すれば再構築するプロジェクトは、Makeで構築できます.
実際のMakefileスクリプトを使用して、コンストラクションを簡単にする方法を見てみましょう.
.PHONY: help prepare-dev test lint run doc

VENV_NAME?=venv
VENV_ACTIVATE=. $(VENV_NAME)/bin/activate
PYTHON=${VENV_NAME}/bin/python3

.DEFAULT: help
help:
    @echo "make prepare-dev"
    @echo "       prepare development environment, use only once"
    @echo "make test"
    @echo "       run tests"
    @echo "make lint"
    @echo "       run pylint and mypy"
    @echo "make run"
    @echo "       run project"
    @echo "make clean"
    @echo "       clean python cache files"
    @echo "make doc"
    @echo "       build sphinx documentation"



#   python         
prepare-dev:
    sudo apt-get -y install python3.6 python3-pip
    python -m venv venv

#       
venv: $(VENV_PATH)/bin/activate
  source $(VENV_PATH)/bin/activate

test: venv
    ${PYTHON} -m pytest

lint: venv
    ${PYTHON} -m pylint
    ${PYTHON} -m mypy

run: venv
    ${PYTHON} app.py


clean-pyc:
    @find . -name '*.pyc' -delete
    @find . -name '__pycache__' -type d | xargs rm -fr
    @find . -name '.pytest_cache' -type d | xargs rm -fr

clean:clean-pyc
    @echo "## Clean all data."

doc: venv
    $(VENV_ACTIVATE) && cd docs; make html

説明
このMakefileにより、Pythonプロジェクトを簡単に作成でき、make prepare-devを実行するだけでpythonインフラストラクチャを構築できます.
プロジェクト開発に入るたびにsource project/bin/activateを長く打つ必要はなく、make venvを実行するだけです.
また、実際のプロジェクトの必要に応じてtargetをカスタマイズしてコマンド実行を簡素化することもできます.例:
login_db:
    docker-compose run db bash 

以上のコマンドにより、dockerデータベースシステムへのログインのネーミングをmake login_に簡略化できます.db.
リファレンス
  • http://www.ruanyifeng.com/blog/2015/02/make.html
  • https://gist.github.com/isaacs/62a2d1825d04437c6f08
  • https://mathsyouth.github.io/2016/12/29/setuptools