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ファイルの作成に失敗したときの対処療法メモでした。
ちょっと広告です
https://business.xserver.ne.jp/
https://www.xdomain.ne.jp/
★LOLIPOP★
.tokyo
MuuMuu Domain!






