Vor einiger Zeit bin ich mehr oder weniger Zufällig auf Mise en place gestoßen.

Einige werden sich wohl fragen, was das nun wieder für ein Tool sein soll.
Der Name sagt es eigentlich schon. “Mise en place” kommt aus der französischen Küche und beschreibt die vollumfängliche Vorbereitung des Kochens.
Genauso macht es Mise auch für meine Entwicklungsumgebungen und meine Computer.

Aber nochmal kurz einen Schritt zurück.
Es gibt einige Tools, welche genau das gleiche machen wie Mise, ASDF zum Beispiel.
Warum ich damals bei Mise hängen geblieben bin:

  • Es ist in Rust geschrieben.
  • Es hat “einfach mal eben schnell”™️ funktioniert.
  • Es hat eine gute Dokumentation die alles erklärt.

Was mache ich nun mit Mise?

Wenn man der Installationsanleitung gefolgt ist sollte alles bereit sein.
Das einzige was noch fehlt, ist die automatische Aktivierung von Mise, auch dafür gibt es ein Kapitel in der Dokumentation.

Damit ist dann wirklich alles vorbereitet.

Was ich nun mit Mise mache ist einfach an dem Beispiel des Blogs erklärt. Im Repository des Blogs existiert eine mise.toml:

1[tools]
2hugo = "latest"

Sobald ich jetzt im Terminal in das Repo wechsel lädt Mise automatisch alle definierten Tools nach.
Sprich ich habe genau die Tools geladen, welche ich für das Arbeiten in diesem Repository unbedingt benötige.

Mise kann natürlich deutlich mehr, als dieses kleine Beispiel zeigt, deshalb lasst uns direkt zum nächsten gehen.

Python Projekte

Ich nutze Pycharm als die IDE der Wahl, wenn ich irgendetwas mit Python mache. Auch hier ist Mise unglaublich gut. Alle Jetbrains IDEs haben ein Plugin, welches direkt mit Mise interagiert.

Ebenso nutze ich mittlerweile fast ausschlieslich Poetry um meine Python Projekte zu verwalten. Poetry und Mise harmonieren dabei sehr gut.

Hier ein kleines Beispiel:

  • Installiert mit mise install -g poetry, Poetry global.
  • Falls ihr schon ein Projekt mit Poetry habt nutzt dieses, ansonsten legt euch mit poetry init eine neue pyproject.toml an.

Ich zeige es euch Anhand eines kleinen Projekts, in dem ich Skripte verwalte, die mit der Homeassistant API interagieren.
Meine pyproject.toml sieht so aus:

 1[project]
 2name = "hass-scripts"
 3version = "0.1.0"
 4description = ""
 5authors = [
 6    {name = "kevin",email = "..."}
 7]
 8readme = "README.md"
 9requires-python = "<4.0, >=3.13"
10dependencies = [
11    "homeassistant-api (>=5.0.0,<6.0.0)",
12    "poetry-core (>=2.0.0,<3.0.0)",
13    "click (>=8.2.1,<9.0.0)"
14]
15
16
17[build-system]
18requires = ["poetry-core>=2.0.0,<3.0.0"]
19build-backend = "poetry.core.masonry.api"

und die dazugehörige mise.toml:

1[env]
2MISE_POETRY_AUTO_INSTALL=1
3[tools]
4poetry = { version = "latest", pyproject = "<workdir>/pyproject.toml" }
5python = "3.13"

mise macht hier zwei Dinge:

  1. Es definiert mein Python als ein Python in Version 3.13.
  2. Es definiert, welche Version von Poetry genutzt werden soll und wo die pyproject.toml liegt.
    • Durch die Env Var MISE_POETRY_AUTO_INSTALL wird automatisch Poetry initialisiert und das venv mit allen Abhängigkeiten installiert.

Dieses Verhalten ist besonders angenehm, wenn man mit mehreren Menschen an einem Projekt arbeitet.
Die Python Version muss aktualisiert werden? Kein Problem, schreib es in die mise.toml und beim nächsten Pull haben alle die neue Python Version.

In meiner Firma nutzen wir es schon länger als Tool der Wahl um die Entwicklungsumgebungen zu verwalten.
Hier gehen wir teilweise deutlich weiter und definieren auch mise tasks, damit alles immer gleich abläuft. Dadurch werden auch viele Rückfragen eliminiert, wie z.B. “Was muss ich alles installieren?”.
Es hilft dadurch ungemeint, die Leute ungestört arbeiten zu lassen und sich nicht mit allen möglichen Paketverwaltungen rumschlagen zu müssen.
Ja Ansible Galaxy ich mein dich!

So, bevor das jetzt zu einem Rant wird, dass soll es erstmal sein.