Man kennt das: Man programmiert eine Python-Anwendung und benötigt ur-plötzlich Funktionalität eines Python-Moduls, das so speziell ist, dass es durch den Paketmanager der Distribution nicht bereitgestellt wird.
Jetzt gibt es mehrere Möglichkeiten:
virtualenv aufsetzen, damit die Verwirrung größer wird, welche Pakete
man durch die Distribution nach /usr/lib/.../site-packages
installiert hat und welche man lokal durch den Python-Paketmanager pip
installiert hat.
als root pip ausführen, damit man sich /usr/lib/.../site-packages
mit Dateien
vollkantet, die nicht unter Kontrolle des Distributionspaketmanager
stehen...
$HOME/.local des Standard-PYTHONPATH nutzen, bringt aber das Gleiche Ergebnis wie bei einer virtualenv
Oder...
Man setzt ein Tool ein, dass einem das Erstellen von distributionsspezifischen Paketen von Python-Modulen vereinfacht.
Archlinux-User können hier auf das Programm
pipman
aus dem AUR
zurückgreifen. Einfach den PKGBUILD-Snapshot herunterladen,
makepkg -si
ausführen und schon hat man:
[sxw@archeus] [~/tmp/pipman-git] > pipman --version
Usage:
pipman (-h | --help)
pipman [options] <packages>...
pipman [options]
[sxw@archeus] [~/tmp/pipman-git] >
Jetzt kann man ganz entspannt das Python-Modul der Begierde herunterladen und es wird automatisch ein PKGBUILD mit all den Informationen, die pip hergibt gefüllt:
[sxw@archeus] [~] > pipman sysv_ipc
pipman: Preparing virtualenv
pipman: Installing 'sysv_ipc' in virtualenv
Collecting sysv_ipc
Downloading sysv_ipc-1.0.1.tar.gz (102 kB)
|████████████████████████████████| 102 kB 1.9 MB/s
Using legacy 'setup.py install' for sysv-ipc, since package 'wheel' is not installed.
Installing collected packages: sysv-ipc
Running setup.py install for sysv-ipc ... done
Successfully installed sysv-ipc-1.0.1
pipman: Checking package info
pipman: Generating pkgbuild for sysv_ipc
[sxw@archeus] [~] >
Und schon wurde ein Verzeichnis python-sysv_ipc
erstellt mit folgender
PKGBUILD:
[sxw@archeus] [~/python-sysv_ipc] > cat PKGBUILD
# PKGBUILD generated by pipman
# Python package author: Philip Semanchuk <philip@semanchuk.com>
pkgname=python-sysv_ipc
pkgver=1.0.1
pkgrel=1
pkgdesc="System V IPC primitives (semaphores, shared memory and message queues) for Python"
arch=(any)
url="http://semanchuk.com/philip/sysv_ipc/"
license=(http://creativecommons.org/licenses/BSD/)
makedepends=("python" "python-pip")
build() {
pip install --no-deps --target="sysv_ipc" sysv_ipc==1.0.1
}
package() {
sitepackages=$(python -c "import site; print(site.getsitepackages()[0])")
mkdir -p $pkgdir/"$sitepackages"
cp -r $srcdir/sysv_ipc/* $pkgdir/"$sitepackages"
}
Pipman hat soweit möglich alle Felder, die pip bietet übernommen. Jetzt
kann hier wie gewohnt mit makepkg -si
gebaut werden:
[sxw@archeus] [~/python-sysv_ipc] > makepkg -si
==> Making package: python-sysv_ipc 1.0.1-1 (So 13 Sep 2020 21:58:39 CEST)
==> Checking runtime dependencies...
==> Checking buildtime dependencies...
==> Retrieving sources...
==> Extracting sources...
==> Starting build()...
...
==> Installing package python-sysv_ipc with pacman -U...
loading packages...
resolving dependencies...
looking for conflicting packages...
Package (1) New Version Net Change
python-sysv_ipc 1.0.1-1 0,06 MiB
Total Installed Size: 0,06 MiB
:: Proceed with installation? [Y/n] y
...
Und fertig:
[sxw@archeus] [~/python-sysv_ipc] > pacman -Ql python-sysv_ipc
python-sysv_ipc /usr/
python-sysv_ipc /usr/lib/
python-sysv_ipc /usr/lib/python3.8/
python-sysv_ipc /usr/lib/python3.8/site-packages/
python-sysv_ipc /usr/lib/python3.8/site-packages/sysv_ipc-1.0.1-py3.8.egg-info/
python-sysv_ipc /usr/lib/python3.8/site-packages/sysv_ipc-1.0.1-py3.8.egg-info/PKG-INFO
python-sysv_ipc /usr/lib/python3.8/site-packages/sysv_ipc-1.0.1-py3.8.egg-info/SOURCES.txt
python-sysv_ipc /usr/lib/python3.8/site-packages/sysv_ipc-1.0.1-py3.8.egg-info/dependency_links.txt
python-sysv_ipc /usr/lib/python3.8/site-packages/sysv_ipc-1.0.1-py3.8.egg-info/installed-files.txt
python-sysv_ipc /usr/lib/python3.8/site-packages/sysv_ipc-1.0.1-py3.8.egg-info/top_level.txt
python-sysv_ipc /usr/lib/python3.8/site-packages/sysv_ipc.cpython-38-x86_64-linux-gnu.so