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:
setup.py build
seharusnya sudah cukupsetup.py
atau diambil dari tag git (menggunakan paket setuptools-scm) jika perlu.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 :)