Libseccomp: RFE: сделать привязки Python доступными через pip

Созданный на 24 дек. 2016  ·  9Комментарии  ·  Источник: seccomp/libseccomp

enhancement prioritlow

Все 9 Комментарий

Я рассмотрю это, но считаю, что на данный момент это крайне низкий приоритет (это всегда может измениться).

Для дальнейшего использования документация Python по упаковке / распространению кода:

Спасибо @pcmoore за комментарии к PR. Я надеялся помочь с упаковкой привязок python и вчера вечером начал изучать их.

Некоторые из быстрых исправлений заключались в добавлении MANIFEST.in и обновлении файлов setup.py. Мне удалось получить обновленный setup.py для работы с pip install , но он определенно требует дополнительной работы, чтобы действительно работать с версией для разработки (я еще не рассматривал ошибку # 217, но, возможно, скоро ).

IMO, было бы разумно выделить привязки Python к отдельному репо для лучшего рабочего процесса разработки / тестирования / выпуска. Я работал над проектами Python, но не слишком много над проектами Cythonized, но я рад помочь в любом качестве.

Я надеялся помочь с настройкой документации после исправления # 61 (что, вероятно, будет упрощено, если мы переместим это в новое репо, хотя, я знаю, как sphinx инструмент документации Python обрабатывает файлы cython).

Из комментария @pcmoore в выпуске № 216:

По сути, нам нужно решить, хотим ли мы продолжать поддерживать привязки Python как часть основного дистрибутива исходного кода libseccomp или хотим разделить их, как мы это делаем для привязок golang.

Мне нравится идея отделения привязок python от основного пакета libseccomp, и я также согласен с тем, что для меня это довольно низкий приоритет. Если кто-то еще заинтересован в том, чтобы подобрать эту работу, я с радостью помогу ее просмотреть :).

Кстати, я согласен с тем, что привязки python должны быть в отдельном репо. Хотя я не занимаюсь волонтерством. : ^)

Если кто-то с разрешениями на создание нового репо в организации seccomp может его настроить, я могу вытащить привязки Python из репо и создать PR.

Я предвижу несколько изменений:

  • Используйте собственные инструменты сборки Python, setup.py build должно быть достаточно
  • Номера версий могут быть жестко запрограммированы в setup.py или взяты вместо этого из тегов git (с использованием пакета setuptools-scm), если это необходимо.
  • Динамическое связывание с основным libseccomp вместо статического связывания. (Уже предложено в # 217)

Я не слишком внимательно изучал средства тестирования, чтобы увидеть, есть ли хороший способ перенести их для использования собственных тестов Python с помощью фреймворков тестирования стиля pytest или nose2 .

Наконец, некоторая дополнительная документация для создания пакетов распространения как исходных, так и двоичных дистрибутивов.

Я собираюсь предварительно отметить это для v2.6, что на самом деле означает «когда-нибудь после того, как мы выпустим v2.5». Завершение v2.5 является нашим приоритетом прямо сейчас, мы можем вернуться к этому вопросу позже.

Для меня также было бы очень полезно сделать libseccomp pip-installable. Вот моя любительская работа по использованию make / pory / docker (и исправлению setup.py), если кто-то еще пытается в этом разобраться. Я также настроил / установил параметры сборки, чтобы не требовалось sudo.

build-seccomp / setup.py (слегка измененный /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 (у меня в приложении есть эквивалентная, но уродливая / более дружественная к кешу версия):

# ============= 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"

приложение / main.py :

import os
import seccomp

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

Я просто хотел поблагодарить вас за помощь в этом вопросе. Мы с @drakenclimber все еще заняты завершением выпуска v2.5.0, так что, возможно, мы не будем уделять этому особого внимания, пока это не будет сделано, но я могу обещать вам, что мы не забываем об этом :)

Была ли эта страница полезной?
0 / 5 - 0 рейтинги