====== lpm — Pakete bauen und benutzen ======
''lpm'' ist der Paketmanager für Lyx: Pakete anlegen, packen, veröffentlichen, auflösen und in den Cache holen. Diese Seite zeigt den Ablauf von Anfang bis Ende; die Einzelheiten stehen in der [[lyx_-_programmiersprache:tools:lpm|lpm-Referenz]] und im [[lyx_-_programmiersprache:tools:lpm:registry-protokoll|Registry-Protokoll]].
**Der Compiler ruft ''lpm'' noch nicht selbst auf.** Ein ''import mathhelfer'' findet das Paket nicht von allein; der Pfad muss über ''-I'' angegeben werden. Alles Übrige — anlegen, packen, auflösen, cachen — arbeitet. Stand: ''lpm'' 0.1.1, ''lyxc'' 1.1.3I; Einzelheiten unter [[lyx_-_programmiersprache:tools:lpm:compiler-integration|Compiler-Integration]].
→ [[lyx_-_programmiersprache:tools:lpm|lpm-Referenz]] · [[lyx_-_programmiersprache:sprache:module-und-importe|Module & Importe]]
----
===== 1. Paket anlegen =====
$ lpm init --name=mathhelfer
lpm: Paket 'mathhelfer' initialisiert.
lpm: lyx.toml wurde erstellt.
[package]
name = "mathhelfer"
version = "0.1.0"
author = ""
license = "MIT"
description = ""
[build]
entry = "main.lyx"
Die Unit dazu — ihr Name ist der Paketname:
unit mathhelfer;
pub fn Ggt(a: int64, b: int64): int64 {
var x: int64 := a;
var y: int64 := b;
while (y != 0) {
var t: int64 := y;
y := x - (x / y) * y;
x := t;
}
return x;
}
----
===== 2. Packen =====
$ lpm pack .
lpm: mathhelfer@0.1.0 gepackt:
./mathhelfer-0.1.0.lxpkg
sha256 97193fb1a2ee1fcec8121a9e776b669d9ae4767a0adcfca3e5c80505922b4256
539 Bytes
Das ''.lxpkg'' ist das Verteilformat; die Prüfsumme steht in der Ausgabe und wird beim Auflösen geprüft.
----
===== 3. Ohne Registry: in den Cache legen =====
Für ein Firmenpaket oder zum Ausprobieren genügt der lokale Cache:
$ lpm cache add mathhelfer-0.1.0.lxpkg mathhelfer 0.1.0
lpm: mathhelfer@0.1.0 entpackt nach /home/andreas/.lpm/cache/mathhelfer/0.1.0
$ lpm cache list
Gecachte Pakete in /home/andreas/.lpm/cache:
mathhelfer@0.1.0
net/http@0.3.0
Mit Registry wäre der Weg ''lpm login --token=…'' und ''lpm publish .''; ''lpm search'' und ''lpm info'' fragen die Registry ab (Vorgabe: ''https://lpm.seolizer.de'', abweichend über ''--registry='').
----
===== 4. Im eigenen Projekt benutzen =====
In ''lyx.toml'' des nutzenden Projekts:
[dependencies]
mathhelfer = "0.1.0"
$ lpm install --offline
lpm: 1 Paket(e) aufgeloest, lyx.lock geschrieben.
''lyx.lock'' hält fest, was tatsächlich verwendet wird — Name, Version, Prüfsumme, Fundort:
# Automatisch generiert — nicht manuell bearbeiten
[[package]]
name = "mathhelfer"
version = "0.1.0"
source = "/home/andreas/.lpm/cache/mathhelfer/0.1.0"
Die Datei gehört **in die Versionsverwaltung**: Sie ist der Unterschied zwischen „baut bei mir" und „baut überall gleich".
----
===== 5. Übersetzen =====
''lpm resolve'' nennt den Pfad — ohne ''--entry'' das Verzeichnis, mit ''--entry'' die Unit-Datei:
$ lpm resolve mathhelfer
/home/andreas/.lpm/cache/mathhelfer/0.1.0
$ lpm resolve mathhelfer --entry
/home/andreas/.lpm/cache/mathhelfer/0.1.0/main.lyx
Weil ''lyxc'' zu ''import mathhelfer'' eine Datei **''mathhelfer.lyx''** sucht, die Paketdatei aber ''main.lyx'' heißt, führt heute dieser Weg zum Ziel:
mkdir -p deps
cp "$(lpm resolve mathhelfer --entry)" deps/mathhelfer.lyx
lyxc main.lyx -I deps -o nutzer
// main.lyx des nutzenden Projekts
import std.io;
import mathhelfer;
fn main(): int64 {
PrintLn(IntToStr(Ggt(48, 18))); // 6
return 0;
}
6
Nachgemessen mit ''lpm 0.1.1'' und ''lyxc 1.1.3I''.
----
===== Die Befehle im Überblick =====
^ Befehl ^ Zweck ^
| ''lpm init [%%--%%name=…]'' | Paket anlegen (''lyx.toml'') |
| ''lpm install [pkg[@ver]]'' | Abhängigkeiten auflösen, ''lyx.lock'' schreiben |
| ''lpm remove '' | Abhängigkeit entfernen |
| ''lpm update [pkg]'' | Index auffrischen, Pakete aktualisieren |
| ''lpm search '' / ''lpm info '' | Registry durchsuchen / Details |
| ''lpm list'' | Was ''lyx.lock'' festhält |
| ''lpm pack [dir]'' / ''lpm publish [dir]'' | Packen / packen und hochladen |
| ''lpm login %%--%%token=…'' / ''lpm logout'' | Registry-Zugang |
| ''lpm resolve [%%--%%entry]'' | Pfad im Cache (für Werkzeuge) |
| ''lpm cache list %%|%% clean %%|%% add %%|%% remove'' | Cache verwalten |
Global: ''--offline'' (nur Cache), ''--registry='', ''--verbose''.
----
===== Gewohnheiten =====
* **''lyx.lock'' einchecken**, ''.lxpkg''-Dateien nicht.
* **''--offline'' im Build** — ein Bau, der aus dem Netz nachlädt, ist nicht reproduzierbar.
* **Version erhöhen statt überschreiben.** Ein veröffentlichtes Paket bleibt, wie es ist; Prüfsummen sind sonst wertlos.
* **Paketname = Unitname.** Alles andere führt zu Importen, die niemand findet.
----
===== Fallstricke =====
* **''Modul nicht gefunden'' trotz ''lpm install''** — der Compiler fragt ''lpm'' nicht; ''-I'' setzen (siehe oben).
* **Dateiname im Paket** heißt ''main.lyx'', gesucht wird ''.lyx''.
* **''sha256'' leer in ''lyx.lock''** bei lokal eingespielten Paketen — aus der Registry geladene tragen die Prüfsumme.
Letzte Aktualisierung: 2026-08-19 — vollständiger Ablauf mit ''lpm 0.1.1'' und ''lyxc 1.1.3I'' durchgespielt und alle Ausgaben übernommen.