Pipman

von Simon Wilper am Sonntag, 13. September 2020

Darum geht es

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:

Oder...

Man setzt ein Tool ein, dass einem das Erstellen von distributionsspezifischen Paketen von Python-Modulen vereinfacht.

Installation

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] >

Python-Modul installieren

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