何故自前でするか
PyPIにあるビルド済Kivyの最終リリースは2024/12/27と古く、対応しているPythonが3.13までなのがしんどいから。
git clone
$ git clone git@github.com:kivy/kivy.git
ちょっと修正
そのままだとpillowのversion指定が一貫していない事によるエラーと
[project.optional-dependencies]
base = ["pillow>=9.5.0,<12"]
full = ["pillow>=12.3,<13"]
sphinxがPython3.12以上を求めるのに3.11以上対応を謳っている事によるエラーと
[project]
requires-python = ">=3.11"
依存ライブラリをビルドする際の実行権限のエラーが起きるので以下のように修正してあげる。
diff --git a/pyproject.toml b/pyproject.toml
index f8109e02c..8dcfe2bc2 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -18,7 +18,7 @@ name = "Kivy"
dynamic = ["version"]
description = "An open-source Python framework for developing GUI apps that work cross-platform, including desktop, mobile and embedded platforms."
readme = "README.md"
-requires-python = ">=3.11"
+requires-python = ">=3.12"
license = "MIT"
license-files = ["LICENSE"]
authors = [
@@ -95,7 +95,7 @@ dev = [
docs = [
"sphinx==9.1.0"
]
-base = ["pillow>=9.5.0,<12"]
+#base = ["pillow>=9.5.0,<12"]
media = [
'kivy_deps.gstreamer~=0.3.3; sys_platform == "win32"',
# todo(cclauss): modify when python3.14 -m pip install ffpyplayer works
diff --git a/tools/build_linux_dependencies.sh b/tools/build_linux_dependencies.sh
index 6fee847c0..318f53f94 100755
--- a/tools/build_linux_dependencies.sh
+++ b/tools/build_linux_dependencies.sh
@@ -100,7 +100,7 @@ popd
echo "-- Build SDL3_mixer"
pushd $MANYLINUX__SDL3_MIXER__FOLDER
- ./external/download.sh;
+ bash ./external/download.sh;
sdl_mixer_builds_args=(
-DCMAKE_POSITION_INDEPENDENT_CODE="ON"
@@ -124,7 +124,7 @@ popd
echo "-- Build SDL3_image"
pushd $MANYLINUX__SDL3_IMAGE__FOLDER
- ./external/download.sh;
+ bash ./external/download.sh;
cmake -B build -DBUILD_SHARED_LIBS=ON \
-DCMAKE_BUILD_TYPE=Release \
-DSDLIMAGE_VENDORED=ON \
@@ -136,7 +136,7 @@ popd
echo "-- Build SDL3_ttf"
pushd $MANYLINUX__SDL3_TTF__FOLDER
- ./external/download.sh;
+ bash ./external/download.sh;
cmake -B build-cmake \
-DBUILD_SHARED_LIBS=ON \
-DSDLTTF_HARFBUZZ=ON \
依存ライブラリ達をビルド
$ cd ./tools
$ bash ./build_linux_dependencies.sh
ビルドに成功するとkivy-dependenciesというディレクトが出来上がっている。
$ ls ./kivy-dependencies/
build dist download
この中で要るのはdistだけなので他は削除して良い。というか容量が馬鹿にならないので削除した方が良い。
依存ライブラリの場所をKivyに伝える為の環境変数
$ export KIVY_DEPS_ROOT=kivy-dependenciesへのパス(絶対パスが無難だと思う)
これはKivyをビルドする時のみ必要な変数で、Kivyアプリ実行時には要らない。
Kivyをビルド
$ cd ../
$ uv sync --extra dev --extra full
ユニットテストで問題が出なければ萬歳。
$ uv run make test
Cythonファイルを弄りたい場合
Cythonファイルに手を加えた後は当然Kivyの再ビルドが必要となるが、そうしようと次のコマンドを打つとCythonが無いと怒られる。
$ uv run python ./setup.py build_ext --inplace
意外な事に先程Kivyのビルドに用いたであろうCythonは仮想環境には入っていないのだ。なので別に入れないといけない。
$ grep cython ./pyproject.toml
"cython>=0.29.1,<=3.2.0",
"cython==3.2.0",
cython_min = "0.29.1"
cython_max = "3.2.0"
cython_exclude = ""
$ uv pip install Cython==3.2.0
ここでは $ uv pip install を用いたが代えて $ uv add を用いると勝手にKivyの再ビルドが始まってしまい待たされてしまう。(ここら辺は単に私がuv或いは仮想環境全般を理解していないだけだと思いますが自分が思っている以上に不必要な再ビルドが起きてしまう事がある)。