macOSでのbuildozerでpipが失敗するせいでKivyアプリのビルドが失敗するときの対処療法のメモ、の巻

macOSでのbuildozerでpipが失敗するせいでKivyアプリのビルドが失敗するときの対処療法のメモ、の巻

はじめに

macOSにおいて、KivyアプリをAndroid用のアプリにするため、pipenvの仮想環境中のbuildozerで、

 buildozer -v android debug

としてapkファイルを作成しようとすると、

[INFO]:    # Installing pure Python modules
[INFO]:    *** PYTHON PACKAGE / PROJECT INSTALL STAGE FOR ARCH: arm64-v8a ***
[INFO]:    The requirements (certifi) don't have recipes, attempting to install them with pip
[INFO]:    If this fails, it may mean that the module has compiled components and needs a recipe.
[INFO]:    -> directory context /Users/***/***/***/.buildozer/android/platform/build-arm64-v8a/build
[DEBUG]:   -> running python3 -m venv venv
[INFO]:    Upgrade pip to latest version
[DEBUG]:   -> running bash -c source venv/bin/activate && pip install -U pip
[DEBUG]:   	Ignoring "sys._home = value" override
[DEBUG]:   	WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
[DEBUG]:   	Requirement already satisfied: pip in ./venv/lib/python3.9/site-packages (22.0.4)
[DEBUG]:   	WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/pip/
---途中省略-
[DEBUG]:   	Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/pip/ (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.")) - skipping
[INFO]:    Install Cython in case one of the modules needs it to build
[DEBUG]:   -> running bash -c venv/bin/pip install Cython
[DEBUG]:   	Ignoring "sys._home = value" override
[DEBUG]:   	WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
[DEBUG]:   	WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/cython/
--途中省略--
[DEBUG]:   	Could not fetch URL https://pypi.org/simple/cython/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/cython/ (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.")) - skipping
[DEBUG]:   	ERROR: Could not find a version that satisfies the requirement Cython (from versions: none)
[DEBUG]:   	ERROR: No matching distribution found for Cython

などと言われて、pipによるモジュール取得ができずにビルドに失敗してしまいます。困った。。。

の、対処療法のメモです。

実施環境

  • MacBook Pro, 2021 Apple M1 Proチップ
  • macOS Monterey バージョン12.6
  • Android Studio; Chipmunk | 2021.2.1 Patch 1 (のandroidエミュレータを使用)
  • Homebrew 3.5.3
  • Pyenv 2.3.1
  • Pipenv; version 2022.6.7
  • pip 22.1.2
  • Python 3.9.12
  • Buildozer 1.4.0.dev0
    • buildozer.specファイルにおいて、p4a.branch = developとしています
  • Kivy 2.1.0
  • Cython 0.29.19

*Homebrew以下、全部x86_64環境(ターミナルをRosseta2で開いた状態)で導入しています。

やりかた

上記のエラーを回避してapkファイルをビルドするには、

buildozer -v android debug

を実行して一旦失敗しておきます。

そしたら、pipenv仮想環境をexitして、一旦抜けます

exit

仮想環境を抜けたら、生成された.buildozerディレクトリの中のbuildディレクトリのところまで行きます。

cd .buildozer/android/platform/build-arm64-v8a/build

すると、venvディレクトリがあるので、

[build]$ ls
bootstrap_builds	javaclasses		libs_collections	other_builds		python-installs		venv

venvディレクトリを削除します。

rm -rf venv

削除したら、仮想環境中にいない状態のpythonを使って、venvを作り直します。

python -m venv venv

そしたら元のbuildozerを実行するディレクトリに戻って、、、

cd ../../../../../

pipenvを再開します。

pipenv shell

で、pipenvの仮想環境に入ったら、buildozer -v android cleanをやらずにそのまま、

buildozer -v android debug

を実行します。すると、pipがうまく走って、、、

# Android packaging done!
# APK android_test-0.1-arm64-v8a-debug.apk available in the bin directory

となって、apkファイルを作成できました。

うむ、binディレクトリを見るとできてますね。

$ ls bin

android_test-0.1-arm64-v8a-debug.apk

おわりに

buildozerでのビルド中にvenvで仮想環境が作られて、その中でいろいろモジュールをpipで取ってくるようなのですが、そのままだとcertificationのところでコケるようでした。venv仮想環境を、certificationに問題がないpythonで作っておくと、うまくpipが動いてapkファイルの作成ができるようなのでした。

なんで? ( ´ ▽ ` )

以上、pipenv仮想環境中でのbuildozerでpipがコケてapkファイルの作成に失敗したときの対処療法メモでした。


さてと、こんなのいかがでしょう?


GUI Programming with Python and Kivy



Pythonコードレシピ集



ちょっと広告です
https://business.xserver.ne.jp/

https://www.xdomain.ne.jp/

wpX Speed / wpX

★LOLIPOP★

.tokyo

MuuMuu Domain!