Discussion:
Welches Tool/Setup um einzelne Python-Programme in venv zu wrappen?
(zu alt für eine Antwort)
Ralph Aichinger
2025-01-05 11:31:29 UTC
Permalink
Gegeben sei ein Tool x von Github, z.B.:

https://github.com/exislow/tidal-dl-ng

Dort steht munter in der Installationsanleitung:

pip install --upgrade tidal-dl-ng

was so einfach unter Debian natürlich nicht geht. IMHO wäre die
"richtige" Variante solche pip-Packages in jeweils eine venv zu
installieren, und dann z.B. mit einem Symlink in /usr/local/bin oder
wo auch immer das Ding zu starten.

Das krieg ich hin, nur kann man den Prozess irgendwie automatisieren?
Gibt es ein Tool, das mir diese Arbeit abnimmt, die ja eher nicht
originell ist, d.h. hunterte Leute stolpern vermutlich über die gleiche
Aufgabe?

/ralph
Ralph Aichinger
2025-01-05 11:34:24 UTC
Permalink
Post by Ralph Aichinger
Das krieg ich hin, nur kann man den Prozess irgendwie automatisieren?
Gibt es ein Tool, das mir diese Arbeit abnimmt, die ja eher nicht
originell ist, d.h. hunterte Leute stolpern vermutlich über die gleiche
Aufgabe?
Sorry, hab vergessen: Das blurb wenn man pip aufruft schlägt pipx vor,
ist das das Mittel der Wahl, oder gibt es noch andere Varianten?

/ralph
Peter J. Holzer
2025-01-05 12:48:15 UTC
Permalink
Post by Ralph Aichinger
pip install --upgrade tidal-dl-ng
was so einfach unter Debian natürlich nicht geht. IMHO wäre die
"richtige" Variante solche pip-Packages in jeweils eine venv zu
installieren, und dann z.B. mit einem Symlink in /usr/local/bin oder
wo auch immer das Ding zu starten.
Das krieg ich hin, nur kann man den Prozess irgendwie automatisieren?
Gibt es ein Tool, das mir diese Arbeit abnimmt, die ja eher nicht
originell ist, d.h. hunterte Leute stolpern vermutlich über die gleiche
Aufgabe?
Ich wollte eigentlich antworten, dass das ja trivial ist:

1. mkdir -p /usr/local/lib/venv/$PKG
2. python3 -m venv /usr/local/lib/venv/$PKG
3. . /usr/local/lib/venv/$PKG/bin/activate
4. pip install $PKG
5. ln -s /usr/local/lib/venv/$PKG/bin/??? /usr/local/bin

Aber es stellt sich heraus, dass Schritt 5 nicht so einfach ist.

Wie findet man die Liste der Scripts, auf die Symlinks angelegt werden
sollen? Die kann je nach verwendetem Build-Tool in einem anderen File
stehen (setup.py, setup.cfg, pyproject.toml, ...). Kann pip eine
entsprechende Liste liefern?

»pip show --files« schaut vielversprechend aus, liefert aber noch einen
Haufen andere Information, die man rausfiltern muss. Es scheint, dass
die Scripts immer mit » ../../../bin/« beginnen, also sowas wie:

pip show --files $PKG | awk '/^ \.\.\/\.\.\/\.\.\/bin\// { print substr($1, 14)}'

Das ganze Script wäre dann

#!/bin/sh
PKG="$1"
VENVBASE=/usr/local/lib/venv
BINDIR=/usr/local/bin

mkdir -p "$VENVBASE/$PKG"
python3 -m venv "$VENVBASE/$PKG"
. "$VENVBASE/$PKG"/bin/activate
pip install "$PKG"
pip show --files "$PKG" | \
awk '/^ \.\.\/\.\.\/\.\.\/bin\// { print substr($1, 14)}' | \
while read f
do
ln -s "$VENVBASE/$PKG/bin/$f" "$BINDIR"
done

hp

Loading...