Libseccomp: RFE: Stellen Sie die Python-Bindungen über pip . zur Verfügung

Erstellt am 24. Dez. 2016  ·  9Kommentare  ·  Quelle: seccomp/libseccomp

enhancement prioritlow

Alle 9 Kommentare

Ich werde es in Betracht ziehen, aber ich halte dies im Moment für extrem niedrige Priorität (das kann sich immer ändern).

Als zukünftige Referenz die Python-Dokumentation zum Verpacken/Verteilen von Code:

Danke @pcmoore für die Kommentare zu den PRs. Ich hatte gehofft, beim Verpacken der Python-Bindungen helfen zu können, und habe gestern Abend damit angefangen.

Einige der Quick Fixes bestanden darin, MANIFEST.in hinzuzufügen und die setup.py-Dateien zu aktualisieren. Ich konnte die aktualisierte setup.py dazu bringen, mit pip install , aber es braucht sicherlich mehr Arbeit, um tatsächlich mit der Entwicklungsversion zu arbeiten (ich habe den Fehler von #217 noch nicht untersucht, aber vielleicht bald ).

IMO, es wäre sinnvoll, die Python-Bindungen in ein separates Repository zu integrieren, um einen besseren Entwicklungs-/Test-/Release-Workflow zu erzielen. Ich habe an Python-Projekten gearbeitet, aber nicht zu viel an cythonisierten, aber ich helfe gerne, wo immer ich kann.

Ich hatte gehofft, beim Einrichten der Dokumente nach der Korrektur von #61 zu helfen (was wahrscheinlich vereinfacht würde, wenn wir dies in ein neues Repository verschieben, obwohl ich weiß, wie sphinx das Python-Dokumentationstool mit Cython-Dateien umgeht).

Aus dem Kommentar von @pcmoore in Ausgabe #216:

Grundsätzlich müssen wir uns entscheiden, ob wir die Python-Bindings weiterhin als Teil der Haupt-Libseccomp-Quelldistribution unterstützen wollen oder ob wir sie wie bei den Golang-Bindings aufteilen wollen.

Ich mag die Idee, die Python-Bindungen aus dem Hauptpaket libseccomp herauszutrennen, und ich stimme auch zu, dass dies für mich eine relativ niedrige Priorität hat. Wenn jemand anderes Interesse hat, das Werk abzuholen, helfe ich jedoch gerne, es zu überprüfen :).

Übrigens stimme ich zu, dass die Python-Bindungen in einem separaten Repository sein sollten. Obwohl ich mich nicht freiwillig melde. :^)

Wenn jemand mit der Berechtigung zum Erstellen eines neuen Repositorys unter der seccomp-Organisation dieses einrichten kann, kann ich die Python-Bindungen aus dem Repository ziehen und einen PR erstellen.

Es gibt einige Änderungen, die ich vorsehe:

  • Verwenden Sie native Python-Build-Tools, setup.py build sollte ausreichen
  • Versionsnummern können bei Bedarf in setup.py hartcodiert oder stattdessen aus Git-Tags (mit dem Paket setuptools-scm) entnommen werden.
  • Dynamische Bindung an Haupt-libseccomp anstelle von statischer Bindung. (Bereits vorgeschlagen in #217)

Ich habe mich nicht allzu sehr mit Test-Harness befasst, um zu sehen, ob es eine gute Möglichkeit gibt, sie für die Verwendung nativer Python-Tests über pytest oder nose2 Stil-Testframeworks zu portieren.

Schließlich einige zusätzliche Dokumentation zum Erstellen von Distributionspaketen sowohl für Quell- als auch für Binärdistributionen.

Ich werde dies vorläufig für v2.6 markieren, was wirklich nur "irgendwann nachdem wir v2.5 herausgebracht haben" bedeutet. Die Fertigstellung von v2.5 ist derzeit unsere Priorität, wir können dieses Problem später erneut aufgreifen.

libseccomp pip-installierbar zu machen wäre auch für mich sehr hilfreich. Hier ist meine Amateurarbeit mit make/poetry/docker (und patching setup.py), wenn jemand anderes versucht, es herauszufinden. Ich habe auch die Build-Parameter optimiert/festgelegt, damit kein sudo erforderlich ist.

build-seccomp/setup.py (leicht geändert /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 (ich habe eine gleichwertige, aber hässlichere/

# ============= 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'])

Ich wollte nur ein "Dankeschön" für all die Hilfe dazu geben. @drakenclimber und ich sind immer noch damit beschäftigt, die Version v2.5.0 fertigzustellen, daher wird dies möglicherweise nicht viel Aufmerksamkeit von uns erfahren, bis dies erledigt ist, aber ich kann Ihnen versprechen, dass wir dies nicht vergessen :)

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen