{}const=>[]async()letfn</>var
EntwicklungLuaPython

Python + Lua: Wie man zwei Sprachen in einem Projekt zusammenbringt

Wie man Python und Lua in einem Projekt kombiniert, warum es notwendig ist und welche Möglichkeiten der Integration es gibt

К

Kodik

Autor

4 Min. Lesezeit

🤝 Das Paar „Python + Lua“ kombiniert das reichhaltige Ökosystem von Python mit der Geschwindigkeit/Integrierbarkeit von Lua.

Nachfolgend finden Sie 3 praktische Integrationsmethoden mit Beispielen, Tipps zum Datenaustausch und Checklisten für einen schnellen Start.

🔍 Warum Python und Lua kombinieren

Python

Lua

Ein Meer von Bibliotheken: Web, KI, Daten

Minimale Laufzeit, einfache Integration

Einfacher Code, schneller Prototyp

Oft schneller in engen Schleifen (LuaJIT)

API/Backend, Datenverarbeitung

Wir programmieren Engines/Spiele, Plugins

🔥 100.000+ Schüler sind bereits bei uns

Genug Theorie gelesen?
Zeit zu coden!

Kodik — eine App, in der du durch Praxis programmieren lernst. KI-Mentor, interaktive Lektionen, echte Projekte.

🤖 KI 24/7
🎓 Zertifikate
💰 Kostenlos
🚀 Jetzt starten
Heute beigetreten

🎯 Typische Szenarien

  • Spiele und Simulationen: Server/Tools in Python, Spielelogik in Lua.

  • Plugins: Benutzer schreiben Erweiterungen in Lua, der Kern in Python.

  • Automatisierung: Python-Orchestrierung, Lua-Skripte für Aufgaben.

🛠 Drei Integrationsmöglichkeiten

1) Lua wird in Python über lupa (LuaJIT) eingebunden

pip install lupa

Python → ruft Lua auf

from lupa import LuaRuntime
lua = LuaRuntime(unpack_returned_tuples=True)

# 1) Wir erhalten die Funktion direkt
greet = lua.eval('function(name) return "Hello, " .. name .. "!" end'int(greet("Code"))  # Hallo, Cody!

# 2) Arbeiten Sie mit der Tabelle als Objekt
Vector = lua.eval('''
  function (x, y)
    return { x = x or 0, y = y or 0,
      len = function(self) return math.sqrt(self.x*self.x + self.y*self.y) end
    }
  end
''')
v = Vector(3, 4)
print(v.len(v))  # 5.0

Lua → ruft Python auf (Rückrufe)

from lupa import LuaRuntime
lua = LuaRuntime()
def py_log(msg): print("[PY]", msg)

lua.globals().py_log = py_log
lua.execute('py_log("Hello from Lua!")'')  # [PY] Hallo aus Lua!

# Wir übergeben die Python-Funktion an den Lua-Algorithmus
lua.execute('''
  function apply_twice(fn, x) return fn(fn(x)) end
''')
apply_twice = lua.eval('apply_twice')
print(apply_twice(lambda v: v * 2, 5))  # 20

Vorteile: einfach, sehr schnell (LuaJIT), bidirektionale Aufrufe.

Nachteile: Abhängigkeit von Binärdateien, Nuancen der Typen.

2) Lua als Prozess ausführen (subprocess + JSON)

Eine isolierte und für Anfänger verständliche Methode: Kommunikation über Standardstreams und Serialisierung.

Lua-Skript (stdin → stdout)

-- file: worker.lua
local json = require("dkjson")   -- или cjson, если доступен
local input = io.read("*a")
local req = json.decode(input)

local result = { sum = req.a + req.b, ok = true }
io.write(json.encode(result))

Python-Wrapper

import json, subprocess

payload = json.dumps({"a": 2, "b": 40})
proc = subprocess.run(
    ["lua", "worker.lua"],
    input=payload, text=True, capture_output=True, check=True
)
res = json.loads(proc.stdout)
print(res["sum"])  # 42

Vorteile: Medienunabhängigkeit, einfaches Debuggen/Skalieren. Nachteile: IPC ist teurer als ein direkter Aufruf.

3) Erweiterte: allgemeine C-Schicht / FFI

Geeignet, wenn ein vorhandenes C/C++-Modul vorhanden ist: Python und Lua werden mit demselben nativen Code verknüpft. Für den Anfang genügt es, wenn der Anfänger weiß, dass es einen solchen Weg gibt; tiefer - später.

🔄 Schmerzfreier Datenaustausch

Was wir vermitteln

Wie wir übermitteln

Kommentar

Zahlen, Zeichenfolgen, bool

Funktionsargumente (Lupa) / JSON

Beachten Sie, dass in Lua Zahlen standardmäßig float sind

Arrays/Tabellen

Lua-Tabelle ↔ Python-Liste/Dict

Für komplexe Strukturen - Serialisierung in JSON/MsgPack

Binäre Daten

Base64 / Dateien / Shared Memory

In einem Subprozessdiagramm ist eine Datei/Pipe praktischer

Häufige Fehler: schwimmende Typen (int vs float), Zeichenkodierung (UTF-8!), Rekursion in Strukturen.

🧯 Fehler und Protokollierung

Ausnahmen

  • lupa: Lua-Fehler löst Python-Ausnahme aus — wickle Aufrufe ein try/except.

  • subprocess: überprüfe returncode und analysiere stderr.

Protokolle

  • Erstellen Sie ein allgemeines Protokollpräfix: [PY] und [LUA].

  • Für Unterprozess - protokollieren Sie die Eingabe / Ausgabe (kürzen Sie große Nutzlasten).

💡 Mini-Beispiel: „Regeln“ in Lua, Service in Python

-- rules.lua
return {
  discount = function(price)
    if price >= 100 then return price * 0.9 end
    return price
  end
}
# service.py
from lupa import LuaRuntime
lua = LuaRuntime()
rules = lua.eval("dofile")("rules.lua")

def final_price(x): return rules["discount"](x)
print(final_price(150))  # 135.0

💡 Mini-Beispiel: Mini-RPC über JSON

-- rpc.lua (Lua-процесс)
local json = require "dkjson"
local fn = {
  hello = function(args) return "Hi, " .. (args.name or "anon") end,
  add   = function(a,b) return a+b end
}
local req = json.decode(io.read("*a"))
local ok, out = pcall(function()
  if req.fn == "add" then return fn.add(req.a, req.b)
  else return fn.hello(req) end
end)
io.write(json.encode({ ok = ok, result = out }))
# py_rpc.py
import json, subprocess
def call(fn, **kw):
    req = json.dumps(dict(fn=fn, **kw))
    p = subprocess.run(["lua","rpc.lua"], input=req, text=True,
                       capture_output=True, check=True)
    return json.loads(p.stdout)["result"]

print(call("hello", name="Code"))
print(call("add", a=2, b=40))

📚 Möchten Sie tiefer in das Thema einsteigen?

Im Anhang Kodik Sie finden detaillierte Lektionen zu Puthon und Lua, Schritt-für-Schritt-Übungen, Fehleranalyse und praktische Übungen direkt auf Ihrem Telefon oder Browser.

Und wenn Sie über Neuigkeiten, neue Funktionen und nützliche Materialien informiert werden möchten, abonnieren Sie unseren Telegram-Kanal. Dort ist es gemütlich, geschäftlich und mit Liebe zum Code ❤️

💬 Was wirst du in Lua lernen – Regeln, Konfigurationen oder „heiße“ Berechnungen?

🎯Hör auf zu zögern

Artikel gefallen?
Zeit zum Üben!

Bei Kodik liest du nicht nur — du schreibst sofort Code. Theorie + Praxis = echte Skills.

Sofortige Praxis
🧠KI erklärt Code
🏆Zertifikat

Keine Registrierung • Keine Karte