Libseccomp: RFE:Pythonバインディングをpip経由で利用できるようにする

作成日 2016年12月24日  ·  9コメント  ·  ソース: seccomp/libseccomp

enhancement prioritlow

全てのコメント9件

検討しますが、現時点では優先度が非常に低いと思います(常に変更される可能性があります)。

今後の参考のために、コードのパッケージ化/配布に関するPythonドキュメント:

PRに関するコメントをありがとう@pcmoore 。 私はPythonバインディングのパッケージ化を手伝うことを望んでいて、昨夜それを調べ始めました。

クイックフィックスのいくつかは、MANIFEST.inを追加し、setup.pyファイルを更新することでした。 更新されたsetup.pyをpip installで動作させることができましたが、実際に開発バージョンで動作するには、さらに多くの作業が必要です(#217の失敗についてはまだ調べていませんが、間もなく実行される可能性があります) )。

IMO、開発/テスト/リリースのワークフローを改善するために、Pythonバインディングを別のリポジトリに分割することは理にかなっています。 私はPythonプロジェクトに取り組んできましたが、Cythonizedプロジェクトにはあまり取り組んでいませんでしたが、できる限りのことを喜んでお手伝いします。

(私たちは、これが新しいレポに移動した場合、IDKのが、おそらく単純化されるであろうか、私は#61を固定した後ドキュメントをセットアップする上で役立つように願っていたsphinxファイルcython Pythonのドキュメントツールのハンドル)。

問題#216の@pcmooreのコメントから:

基本的に、メインのlibseccompソースディストリビューションの一部としてPythonバインディングを引き続きサポートするか、golangバインディングの場合と同じように分割するかを決定する必要があります。

私は、Pythonバインディングをメインのlibseccompパッケージから分割するというアイデアが好きです。また、それが私にとってかなり低い優先度であることに同意します。 他の誰かが作品を手に入れることに興味があるなら、私は喜んでそれをレビューするのを手伝います:)。

ところで、私はPythonバインディングが別のリポジトリにあるべきであることに同意します。 私はボランティアではありませんが。 :^)

seccomp orgで新しいリポジトリを作成する権限を持つ人がそれを設定できる場合は、Pythonバインディングをリポジトリから引き出してPRを作成できます。

私が予測するいくつかの変更があります:

  • Pythonネイティブビルドツールを使用します。 setup.py buildで十分です。
  • バージョン番号はsetup.pyハードコーディングするか、必要に応じて代わりにgitタグから取得できます(setuptools-scmパッケージを使用)。
  • 静的バインディングではなく、メインlibseccompへの動的バインディング。 (#217ですでに提案されています)

pytestまたはnose2スタイルのテストフレームワークを介してネイティブPythonテストを使用するためにそれらを移植する良い方法があるかどうかを確認するために、テストハーネスをあまり調べていません。

最後に、ソースディストリビューションとバイナリディストリビューションの両方のディストリビューションパッケージを構築するための追加のドキュメント。

これをv2.6で暫定的にマークします。これは、実際には「v2.5を公開した後のいつか」を意味します。 v2.5を完成させることが現在の優先事項であり、後でこの問題を再検討することができます。

libseccompをpip-installableにすることは、私にとっても非常に役立ちます。 これは、他の誰かがそれを理解しようとしている場合に、make / poetry / 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"

app / 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 評価