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!