
Bild von Autor | Ideogramm# Einführung
Stellen Sie sich Folgendes vor: Sie arbeiten an einem Python -Projekt und jedes Mal, wenn Sie Assessments ausführen möchten, tippen Sie ein python3 -m pytest exams/ --verbose --cov=src. Wenn Sie Ihren Code formatieren möchten, ist dies black . && isort .. Zum Leinen rennen Sie flake8 src exams. Bevor Sie es wissen, jonglieren Sie ein Dutzend verschiedene Befehle, und Ihre Teamkollegen machen das Gleiche auch etwas anders.
Hier sind Makefiles nützlich. Makefiles, die ursprünglich für C- und C ++ – Projekte verwendet wurden, können in der Python -Entwicklung sehr nützlich sein, um gemeinsame Aufgaben zu standardisieren und zu automatisieren. Stellen Sie sich ein Makefile als einen einzigen Ort vor, an dem Sie Abkürzungen für all die Dinge definieren, die Sie wiederholt tun.
# Warum Makefiles in Python -Projekten verwenden?
Konsistenz in Ihrem Staff
Wenn alle in Ihrem Staff rennen make check Anstatt sich an den exakten PyTest -Befehl mit all seinen Flaggen zu erinnern, beseitigen Sie das Drawback „Arbeiten auf meinem Pc“. Neue Teammitglieder können einspringen und sofort wissen, wie man Assessments ausführt, den Code format oder die Anwendung bereitstellt.
Dokumentation, die tatsächlich funktioniert
Im Gegensatz zu ReadMe -Dateien, die veraltet werden, dienen Makefiles als nützliche Dokumentation. Wenn jemand rennt make assistSie sehen genau, welche Aufgaben verfügbar sind und wie sie verwendet werden.
Vereinfachte komplexe Workflows
Einige Aufgaben erfordern mehrere Schritte. Vielleicht müssen Sie Abhängigkeiten installieren, Migrationen ausführen, Saatguttestdaten ausführen und dann Ihren Entwicklungsserver starten. Mit einem Makefile wird dies zu einer einzigen make dev Befehl.
# Erste Schritte mit Ihrem ersten Python Makefile
Lassen Sie uns Schritt für Schritt einen praktischen Makefile -Unternehmen erstellen. Erstellen Sie eine Datei namens Makefile (keine Erweiterung) in Ihrem Projektstamm.
// Grundstruktur und Hilfebefehl
Dieser Code erstellt ein automatisches Hilfesystem für Ihr Makefile, in dem alle verfügbaren Befehle mit ihren Beschreibungen angezeigt werden:
.PHONY: assist
assist: ## Present this assist message
@echo "Accessible instructions:"
@grep -E '^(a-zA-Z_-)+:.*?## .*$$' $(MAKEFILE_LIST) | kind | awk 'BEGIN {FS = ":.*?## "}; {printf " 33(36m%-15s 33(0m %sn", $$1, $$2}'
.DEFAULT_GOAL := assist
Der .PHONY: assist Sagen Sie, machen Sie diese „Hilfe“ keine echte Datei, sondern ein Befehl zum Ausführen. Wenn Sie tippen make assistes druckt zuerst „verfügbare Befehle“: dann verwendet eine Kombination von grep Und awk Um das Makefile selbst zu durchsuchen, finden Sie alle Zeilen, die Befehlsnamen haben, folgen von ## descriptionund formatieren Sie sie in eine nette lesbare Liste mit Befehlsnamen und ihren Erklärungen.
// Umgebungsaufbau
Dieser Code erstellt drei Umgebungsverwaltungsbefehle:
.PHONY: set up
set up: ## Set up dependencies
pip set up -r necessities.txt
pip set up -r requirements-dev.txt
.PHONY: venv
venv: ## Create digital setting
python3 -m venv venv
@echo "Activate with: supply venv/bin/activate"
.PHONY: clear
clear: ## Clear up cache recordsdata and construct artifacts
discover . -type f -name "*.pyc" -delete
discover . -type d -name "__pycache__" -delete
discover . -type d -name "*.egg-info" -exec rm -rf {} +
rm -rf construct/ dist/ .protection htmlcov/ .pytest_cache/
Der set up Der Befehl führt PIP zweimal aus, um sowohl Hauptabhängigkeiten als auch Entwicklungstools aus Anforderungsdateien zu installieren. Der Befehl Venv erstellt einen neuen Ordner „Digital Setting“ Python namens „Venv“ und druckt Anweisungen zum Aktivieren des Aktivierens.
Der clear Der Befehl entfernt alle unordentlichen Dateien, die Python während der Entwicklung erstellt. Es löscht kompilierte kompilierte Python -Dateien (.pyc), Cache -Ordner (Pycache), Paketinfo -Verzeichnisse und erstellen Sie Artefakte wie Berichterstattung und Check -Caches.
// Codequalität und Assessments
Dadurch werden Befehle zur Codequalität erstellt:
.PHONY: format
format: ## Format code with black and isort
black .
isort .
.PHONY: lint
lint: ## Run linting checks
flake8 src exams
black --check .
isort --check-only .
.PHONY: check
check: ## Run exams
python -m pytest exams/ --verbose
.PHONY: test-cov
test-cov: ## Run exams with protection
python -m pytest exams/ --verbose --cov=src --cov-report=html --cov-report=time period
.PHONY: verify
verify: lint check ## Run all checks (lint + check)
Der format Der Befehl behebt Ihren Codestil automatisch mit Schwarz für Formatierung und ISORT für die Importorganisation.
Der Befehl Lint überprüft, ob Ihr Code den Stilregeln befolgt, ohne etwas zu ändern. Flake8 findet Verstöße gegen Stil, während Schwarz und ISORT im Schach-Nur-Schach-Modus ausgeführt werden, um festzustellen, ob Formatierung erforderlich ist.
Der check Der Befehl führt die Testsuite aus. test-cov Führen Sie Assessments aus und misst auch die Codeabdeckung und generiert Berichte. Der verify Der Befehl führt sowohl das Leinen als auch das Check zusammen, indem sie abhängig von der lint Und check Befehle.
// Entwicklungsworkflow
Dies schafft Entwicklungs -Workflow -Befehle:
.PHONY: dev
dev: set up ## Arrange improvement setting
@echo "Improvement setting prepared!"
@echo "Run 'make serve' to start out the event server"
.PHONY: serve
serve: ## Begin improvement server
python3 -m flask run --debug
.PHONY: shell
shell: ## Begin Python shell with app context
python3 -c "from src.app import create_app; app=create_app(); app.app_context().push(); import IPython; IPython.start_ipython()"
Der dev Befehl führt zuerst die aus set up Befehl zum Einrichten von Abhängigkeiten und druckt dann Erfolgsnachrichten mit den nächsten Schritten. Der serve Der Befehl startet einen Flask Improvement Server im Debug -Modus.
Der shell Der Befehl startet eine Ipython -Shell, die bereits mit Ihrem Flask -App -Kontext verbunden ist, sodass Sie Datenbankabfragen und App -Funktionen interaktiv testen können, ohne alles manuell zu importieren.
# Weitere Makefile -Techniken
// Verwenden von Variablen
Sie können Variablen definieren, um eine Wiederholung zu vermeiden:
PYTHON := python3
TEST_PATH := exams/
SRC_PATH := src/
.PHONY: check
check: ## Run exams
$(PYTHON) -m pytest $(TEST_PATH) --verbose
// Bedingte Befehle
Manchmal möchten Sie ein anderes Verhalten auf der Grundlage der Umgebung:
.PHONY: deploy
deploy: ## Deploy utility
ifeq ($(ENV),manufacturing)
@echo "Deploying to manufacturing..."
# Manufacturing deployment instructions
else
@echo "Deploying to staging..."
# Staging deployment instructions
endif
// Dateiabhängigkeiten
Sie können festlegen, dass Ziele von Dateien abhängen, daher werden sie nur bei Bedarf ausgeführt:
necessities.txt: pyproject.toml
pip-compile pyproject.toml
.PHONY: sync-deps
sync-deps: necessities.txt ## Sync dependencies
pip-sync necessities.txt
🔗 Hier ist ein Beispiel für a Komplette Makefile für eine Flask -Webanwendung.
# Finest Practices und Tipps
Hier sind einige Finest Practices, die Sie beim Schreiben von Makefiles folgen müssen:
- Überkomplizieren Sie Ihre Makefile nicht. Wenn eine Aufgabe komplex wird, sollten Sie die Logik in ein separates Skript verschieben und von Make aufrufen.
- Wählen Sie Befehlsnamen, die eindeutig angeben, was sie tun. Check machen ist besser als Tagen Sie T und machen Sie Dev-Setup klarer als ein Setup.
- Für Befehle, die keine Dateien erstellen, deklarieren Sie sie immer als .phony. Dies verhindert Probleme, wenn jemand eine Datei mit demselben Namen wie Ihrem Befehl erstellt.
- Organisieren Sie Ihre Makefiles in gruppenbezogenen Funktionen zusammen.
- Stellen Sie sicher, dass alle Ihre Befehle von einem frischen Klon Ihres Repositorys funktionieren. Nichts frustriert neue Mitwirkende wie ein gebrochener Setup -Prozess.
# Abschluss
Makefiles scheinen vielleicht ein Instrument der alten Schule zu sein, aber sie sind für Python-Projekte wirksam. Sie bieten eine konsistente Schnittstelle für gemeinsame Aufgaben und helfen neue Mitwirkende, schnell produktiv zu werden.
Erstellen Sie ein Primary Makefile mit einfach installieren, testen und helfen. Wenn Ihr Projekt wächst und Ihr Workflow komplexer wird, können Sie nach Bedarf weitere Ziele und Abhängigkeiten hinzufügen.
Denken Sie daran, das Ziel ist nicht, das klugste oder komplexeste Makefile zu schaffen. Es soll Ihre täglichen Entwicklungsaufgaben einfacher und zuverlässiger machen. Halten Sie es einfach, halten Sie es nützlich und lassen Sie Ihr Makefile zum Kommandozentrum werden, das in Ihr Python -Projektchaos Ordnung bringt.
Bala Priya c ist ein Entwickler und technischer Schriftsteller aus Indien. Sie arbeitet gern an der Schnittstelle zwischen Mathematik, Programmierung, Datenwissenschaft und Inhaltserstellung. Ihre Interessensgebiete und Fachgebiete umfassen DevOps, Information Science und natürliche Sprachverarbeitung. Sie liest gerne, schreibt, codieren und Kaffee! Derzeit arbeitet sie daran, ihr Wissen mit der Entwicklergemeinschaft zu lernen und zu teilen, indem sie Tutorials, Anleitungen, Meinungsstücke und vieles mehr autorisiert. Bala erstellt auch ansprechende Ressourcenübersichten und Codierungs -Tutorials.
