検討しますが、現時点では優先度が非常に低いと思います(常に変更される可能性があります)。
今後の参考のために、コードのパッケージ化/配布に関する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を作成できます。
私が予測するいくつかの変更があります:
setup.py build
で十分です。setup.py
ハードコーディングするか、必要に応じて代わりにgitタグから取得できます(setuptools-scmパッケージを使用)。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リリースを完成させるためにまだ忙しいので、それが完了するまで私たちからあまり注目されないかもしれませんが、これを忘れていないことを約束できます:)