Libseccomp: RFE : rendre les liaisons python disponibles via pip

Créé le 24 déc. 2016  ·  9Commentaires  ·  Source: seccomp/libseccomp

enhancement prioritlow

Tous les 9 commentaires

Je vais l'envisager, mais je considère que c'est une priorité extrêmement faible pour le moment (cela peut toujours changer).

Pour référence future, documentation Python sur l'empaquetage/la distribution du code :

Merci @pcmoore pour les commentaires sur les PR. J'espérais aider à emballer les fixations en python et j'ai commencé à m'y pencher la nuit dernière.

Certaines des solutions rapides ajoutaient le MANIFEST.in et mettaient à jour les fichiers setup.py. J'ai pu faire fonctionner le setup.py mis à jour avec pip install , mais il faut certainement plus de travail pour fonctionner réellement avec la version de développement (je n'ai pas encore examiné l'échec de #217, mais peut-être bientôt ).

OMI, il serait logique de tailler les liaisons Python dans un référentiel séparé pour un meilleur flux de travail de développement/test/version. J'ai travaillé sur des projets Python, mais pas trop sur des projets cythonisés, mais je suis heureux d'aider dans toutes mes capacités.

J'espérais aider à la configuration de la documentation après avoir corrigé #61 (ce qui serait probablement simplifié si nous déplacions cela vers un nouveau référentiel, bien que, idk comment sphinx l'outil de documentation Python gère les fichiers cython).

D' après le commentaire de

Nous devons essentiellement décider si nous voulons continuer à prendre en charge les liaisons Python dans le cadre de la distribution principale de libseccomp ou si nous voulons les séparer comme nous le faisons pour les liaisons golang.

J'aime l'idée de séparer les liaisons python du package principal libseccomp, et je suis également d'accord pour dire que c'est une priorité assez faible pour moi. Si quelqu'un d'autre est intéressé à reprendre le travail, je serais heureux de l'aider à le revoir, cependant :).

BTW, je suis d'accord pour que les liaisons python se trouvent dans un référentiel séparé. Même si je ne fais pas de bénévolat. :^)

Si une personne autorisée à créer un nouveau référentiel sous l'organisation seccomp peut le configurer, je peux extraire les liaisons Python du référentiel et créer un PR.

Il y a quelques changements que je prévois :

  • Utilisez les outils de construction natifs Python, setup.py build devrait suffire
  • Les numéros de version peuvent être codés en dur dans setup.py ou être récupérés à partir des balises git (en utilisant le package setuptools-scm) si nécessaire.
  • Liaison dynamique à la libseccomp principale au lieu d'une liaison statique. (Déjà proposé en #217)

Je n'ai pas trop examiné le harnais de test pour voir s'il existe un bon moyen de les porter pour utiliser des tests python natifs via des frameworks de test de style pytest ou nose2 .

Enfin, de la documentation supplémentaire pour créer des packages de distribution à la fois source et binaire.

Je vais provisoirement marquer cela pour la v2.6, ce qui signifie simplement "quelque temps après la sortie de la v2.5". Terminer la v2.5 est notre priorité pour le moment, nous pourrons revoir ce problème plus tard.

Rendre libseccomp pip-installable me serait également très utile. Voici mon travail d'amateur autour de l'utilisation de make/poetry/docker (et de la correction de setup.py) si quelqu'un d'autre essaie de le comprendre. J'ai également modifié/défini les paramètres de construction afin que cela ne nécessite pas sudo.

build-seccomp/setup.py (légèrement modifié /src/python/setup.py ):

# OLD IMPORTS
# -----------------------------------------
# import os 
# 
# from distutils.core import setup
# from distutils.extension import Extension
# from Cython.Distutils import build_ext
# -----------------------------------------

# Replace with these NEW IMPORTS
# -----------------------------------------
import os

from setuptools import setup, Extension
from Cython.Distutils import build_ext
# -----------------------------------------

# rest of the file unmodified...

Makefile :

.ONESHELL: install-libseccomp-native install-libseccomp-deps install-libseccomp build-whl-libseccomp

SECCOMP_BUILD_ENV = VERSION_RELEASE="0.0.0" \
                    CPPFLAGS="-I ../../include " \
                    CFLAGS="-Wall -g -O2" \
                    LDFLAGS="-Wl,-z -Wl,relro "
WHEEL_DIR = $(CURDIR)/dist

install-libseccomp-native:
ifeq (,$(wildcard libseccomp/.)) # If already cloned/built ignore
    git clone https://github.com/seccomp/libseccomp.git --branch v2.4.3 --depth 1
    cp build-seccomp/setup.py libseccomp/src/python/setup.py
    cd libseccomp
    ./autogen.sh
    ./configure --prefix=$(CURDIR)/libseccomp/build-aux
    make install
endif

install-deps:
    poetry install --no-root

# `make install-libseccomp` will install seccomp library into poetry virtual environment.
# this is a good option for local development
install-libseccomp: install-libseccomp-native install-deps
    cd libseccomp/src/python
    export $(SECCOMP_BUILD_ENV)
    poetry run python setup.py install

# `make build-whl-libseccomp` will create a .whl file for the seccomp library
# this is a good option for generating a build artifact in CI/CD or Docker
build-whl-libseccomp: install-libseccomp-native install-deps
    cd libseccomp/src/python
    export $(SECCOMP_BUILD_ENV)
    poetry run python setup.py bdist_wheel --dist-dir=$(WHEEL_DIR)

build-docker:
    docker build -t libseccomp-python .

run-docker:
    docker run --env SOME_VAR_1=42 --env SOME_VAR_2="Hello, World!" libseccomp-python

Dockerfile (j'ai une version équivalente mais plus moche/plus conviviale pour le cache dans mon application) :

# ============= BUILD STAGE ============= #
FROM python:3.8.3-buster as builder

# Install poetry
RUN pip install "poetry==1.0.5"

# Build/install wheels
WORKDIR /app
COPY pyproject.toml poetry.lock Makefile ./
COPY build-seccomp ./build-seccomp
RUN make build-whl-libseccomp

# ========== FINAL IMAGE STAGE ========== #
FROM python:3.8.3-slim-buster

# Install application
COPY --from=builder /app/dist /app/dist
WORKDIR /app
RUN pip install --no-index --find-links dist seccomp
COPY app ./app

# Configure
ENV SOME_VAR_1=
ENV SOME_VAR_2=

# Run the application
CMD ["python", "app/main.py"]

pyproject.toml :

[tool.poetry]
name = "libseccomp-demo"
version = "0.1.0"
description = "Building libseccomp for Python projects."
authors = ["Han Solo"]

[tool.poetry.dependencies]
python = "^3.8"

[tool.poetry.dev-dependencies]
cython = "^0.29.19"
wheel = "^0.34.2"

[build-system]
requires = ["poetry==1.0.5"]
build-backend = "poetry.masonry.api"

app/main.py :

import os
import seccomp

print(os.environ['SOME_VAR_1'])
print(os.environ['SOME_VAR_2'])

Je voulais juste partager un "merci" pour toute l'aide à ce sujet. @drakenclimber et moi-même sommes toujours occupés à essayer de terminer la version 2.5.0, donc cela ne nous attirera peut-être pas beaucoup d'attention jusqu'à ce que cela soit fait, mais je peux vous promettre que nous n'oublions pas cela :)

Cette page vous a été utile?
0 / 5 - 0 notes