Libseccomp: RFE: buat binding python tersedia melalui pip

Dibuat pada 24 Des 2016  ·  9Komentar  ·  Sumber: seccomp/libseccomp

enhancement prioritlow

Semua 9 komentar

Saya akan mempertimbangkannya, tetapi saya menganggap ini sebagai prioritas yang sangat rendah saat ini (yang selalu dapat berubah).

Untuk referensi di masa mendatang, dokumentasi Python tentang kode pengemasan/distribusi:

Terima kasih @pcmoore atas komentarnya di PR. Saya berharap dapat membantu mengemas ikatan python dan mulai memeriksanya tadi malam.

Beberapa perbaikan cepat adalah menambahkan MANIFEST.in dan memperbarui file setup.py. Saya bisa mendapatkan setup.py yang diperbarui untuk bekerja dengan pip install , tetapi tentu membutuhkan lebih banyak pekerjaan untuk benar-benar bekerja dengan versi pengembangan (saya belum melihat kegagalan #217, tapi mungkin segera ).

IMO, masuk akal untuk mengukir binding Python ke repo terpisah untuk alur kerja dev/test/release yang lebih baik. Saya telah mengerjakan proyek Python, tetapi tidak terlalu banyak pada proyek Cythonized, tetapi saya senang membantu dalam kapasitas apa pun yang saya bisa.

Saya berharap dapat membantu dalam menyiapkan dokumen setelah memperbaiki #61 (yang mungkin akan disederhanakan jika kita memindahkan ini ke repo baru, meskipun, tidak tahu bagaimana sphinx alat dokumentasi Python menangani file cython).

Dari komentar @ pcmoore di Edisi #216:

Kami pada dasarnya perlu memutuskan apakah kami ingin terus mendukung binding Python sebagai bagian dari distribusi sumber libseccomp utama atau jika kami ingin membaginya seperti yang kami lakukan untuk binding golang.

Saya menyukai gagasan untuk memisahkan ikatan python dari paket libseccomp utama, dan saya juga setuju bahwa itu adalah prioritas yang cukup rendah bagi saya. Jika orang lain tertarik untuk mengambil pekerjaan itu, saya akan dengan senang hati membantu meninjaunya :).

BTW saya setuju bahwa python binding harus dalam repo terpisah. Meskipun saya tidak menjadi sukarelawan. :^)

Jika seseorang dengan izin untuk membuat repo baru di bawah seccomp org dapat mengaturnya, saya dapat menarik ikatan Python dari repo dan membuat PR.

Ada beberapa perubahan yang saya perkirakan:

  • Gunakan alat pembuatan asli Python, setup.py build seharusnya sudah cukup
  • Nomor versi dapat di-hardcode dalam setup.py atau diambil dari tag git (menggunakan paket setuptools-scm) jika perlu.
  • Pengikatan dinamis ke libseccomp utama alih-alih pengikatan statis. (Sudah diusulkan di #217)

Saya belum melihat terlalu banyak ke dalam test harness untuk melihat apakah ada cara yang baik untuk mem-porting-nya untuk menggunakan tes python asli melalui kerangka pengujian gaya pytest atau nose2 .

Terakhir, beberapa dokumentasi tambahan untuk membangun paket distribusi baik distribusi source maupun binary.

Saya akan menandai ini untuk v2.6, yang sebenarnya hanya berarti "beberapa saat setelah kita mengeluarkan v2.5". Menyelesaikan v2.5 adalah prioritas kami saat ini, kami dapat meninjau kembali masalah ini nanti.

Membuat libseccomp pip-installable akan sangat membantu saya juga. Inilah pekerjaan amatir saya menggunakan make/poetry/docker (dan menambal setup.py) jika ada orang lain yang mencoba mencari tahu. Saya juga mengubah/mengatur parameter build sehingga tidak memerlukan Sudo.

build-seccomp/setup.py (sedikit dimodifikasi /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 (Saya memiliki versi yang setara tetapi lebih buruk/lebih ramah cache di aplikasi saya):

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

aplikasi/main.py :

import os
import seccomp

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

Saya hanya ingin berbagi "terima kasih" untuk semua bantuan dalam hal ini. @drakenclimber dan saya sendiri masih sibuk mencoba untuk menyelesaikan rilis v2.5.0 jadi ini mungkin tidak mendapat banyak perhatian dari kami sampai selesai, tetapi saya dapat berjanji kepada Anda bahwa kami tidak akan melupakan ini :)

Apakah halaman ini membantu?
0 / 5 - 0 peringkat