年に1回のmacOSメジャーアップデートが昨日 (2022年10月25日) 公開されたので、最新版のmacOS Ventura 13.0にクリーンインストールしました。それでPython 3もインストールし直しました。
秋の大アップデート祭
Appleエコシステムで暮らすユーザにとって、秋は毎年恒例のメジャーアップデートの季節です。昨日 (2022年10月25日) 、macOSがVentura 13.0にアップデートされたのと同時に、先月16.0にアップデートされたiOSも16.1にアップデートされました。なので昨日は、
- MacをmacOS Ventura 13.0にアップデートして、
- iPhoneをiOS 16.1にアップデートして、
- iPadをiPadOS 16.1にアップデートして、
- AppleWatchをwatchOS 9.1にアップデートして、
- AppleTVをtvOS 16.1にアップデートして、
- HomePodソフトウェアバージョン16.1にアップデート
しました。このうち、iOSのホームとHomePodがMatter対応しました。ただMatter対応デバイスがないのでいずれにしても確認できないです。HomePodのThreadは、応答が良くなった気がしなくもないです。NanoleafのThread接続電球が前よりもスムーズに応答するようになりました。パフォーマンスと安定性が改善されたらしいので、関係あるかもしれません。
Macのアップデートでは、元のボリュームを消去してクリーンインストールしました。とはいえ/Users以下は別ドライブに置いているので、ユーザデータは残ってます。また/Applicationsもバックアップとってあるので、アプリアイコンをドラッグ&ドロップで元に戻すだけです。ただターミナルから操作するUNIX系コマンド類は、初期状態に戻ってしまいました。そこでスマートホームに欠かせない(個人の感想です)Pythonを復活させます。
macOSのプログラミング環境
macOSは元々がFreeBSD系のOSなので、UNIX系の開発環境が最初から整ってます。cc, gcc, swift, java, perl, rubyなど主要はプログラミング言語はほとんど揃ってます。もちろんPython 3もあります。イケてるUNIX環境なのでPython 2はありません。
% which python python not found % which python3 /usr/bin/python3 % ls -lh /usr/bin/python3 -rwxr-xr-x 76 root wheel 163K 10 18 21:36 /usr/bin/python3
ただ、最近ではライセンスの関係なのか、初期状態では言語系ツールがすぐには動きません。Python 3を動かそうとすると、
% python3 xcode-select: note: no developer tools were found at '/Applications/Xcode.app', requesting install. Choose an option in the dialog to download the command line developer tools.
というようなメッセージが出て、ダイアログが出ます。
ここでインストールボタンを押せば、インストールされることもありますが、失敗することもあります。ccコマンドではこれでインストールできたのですが、python3コマンドでは失敗します。
Xcodeをインストールする
ここで要求されている「コマンドラインデベロッパツール」というのは、Xcodeの一部です。なのでXcodeをインストールすれば確実に対応できます。Xcodeには色々なツールもついてますし、これだけの開発環境が無料ですし、簡単に入手できるので、macOSとセットでインストールすべきアプリと思います。
Xcodeは、App Storeにあります。そこでXcodeを検索するとすぐに出てきます。
Xcodeのダウンロード終了後に起動すると、同意を求められます。コマンドラインからプログラム言語を使う場合に必要だったのは、この同意でした。
この後に、開発に必要なツールがインストールされます。
これでXcodeでプログラム開発できる状態になりました。
でも今回はXcodeは使わないので、ここで終了します。
Python 3を起動する
これでpython3が動くようになってます。以下、太字が入力した部分です。
% python3 --version Python 3.9.6
Python 3の最新バージョンは3.10.4らしく、Raspberry Piにもそれが入っています。ネットを見ると「macOSに入っているPythonは古い」と言われてますが、それは昔の話で、現在はそこそこ最新バージョンが用意されていると思います。pip3もあります。
% pip3 --version pip 21.2.4 from /Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/site-packages/pip (python 3.9)
MQTTライブラリをインストールする
次にPythonにライブラリを追加してみます。MQTTは使いたいので、paho-mqttをインストールします。
% pip3 install paho-mqtt Defaulting to user installation because normal site-packages is not writeable Collecting paho-mqtt Downloading paho-mqtt-1.6.1.tar.gz (99 kB) |████████████████████████████████| 99 kB 8.2 MB/s Building wheels for collected packages: paho-mqtt Building wheel for paho-mqtt (setup.py) ... done Created wheel for paho-mqtt: filename=paho_mqtt-1.6.1-py3-none-any.whl size=62133 sha256=514dad7... Stored in directory: /Users/xxxxx/Library/Caches/pip/wheels/0f/90/29/db29... Successfully built paho-mqtt Installing collected packages: paho-mqtt Successfully installed paho-mqtt-1.6.1 WARNING: You are using pip version 21.2.4; however, version 22.3 is available. You should consider upgrading via the '/Library/Developer/CommandLineTools/usr/bin/python3 -m pip install --upgrade pip' command.
無事インストールできました。pipを使うたびにバージョンが古いというWARNINGが出るので、指示に従ってアップデートしておきました。pip3のバージョンが上がりました。
% /Library/Developer/CommandLineTools/usr/bin/python3 -m pip install --upgrade pip Defaulting to user installation because normal site-packages is not writeable Requirement already satisfied: pip in /Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/site-packages (21.2.4) Collecting pip Downloading pip-22.3-py3-none-any.whl (2.1 MB) |████████████████████████████████| 2.1 MB 7.4 MB/s Installing collected packages: pip % pip3 --version pip 22.3 from /Volumes/home/xxxxx/Library/Python/3.9/lib/python/site-packages/pip (python 3.9)
Pythonから公衆MQTTブローカを使う
paho-mqttを使った簡単なプログラムを作りました。broker.hivemq.comというパブリックなMQTTブローカーに接続するテストです。公衆のブローカーは、ボランティアで動かしてくれているので、止まっているかもしれません。LAN内にMosquittoなどのMQTTブローカを用意してある方はそちらを使うのが確実です。
#!/usr/bin/python3
from paho.mqtt import client as mqtt_client
address='broker.hivemq.com'
port=1883
sub_topic='pythontest/set'
pub_topic='pythontest/get'
client_id=f'python_856389663' #something random
def on_connect(client, userdata, flags, rc):
if rc==0:
print("Connection established.")
client.publish(pub_topic,"Python client connected.")
else:
print("Failed to connect: %d\n",rc)
def on_message(client, userdata, msg):
print(msg.payload.decode())
client=mqtt_client.Client(client_id)
client.on_connect=on_connect
client.connect(address,port)
client.subscribe(sub_topic)
client.on_message=on_message
client.loop_forever()
MQTTの動作をモニターするために、このMQTTブローカーをサブスクライブします。mosquittoをインストール済みのコンピュータから以下のコマンドを入力します。
$ mosquitto_sub -h broker.hivemq.com -t pythontest/# -v
別のターミナルウィンドウから、上記のPythonプログラムを以下
% ./mqtttest.py Connection established.
のように動かすと、MQTTをサブスクライブしたウィンドウにも、
$ mosquitto_sub -h broker.hivemq.com -t pythontest/# -v pythontest/get Python client connected.
というメッセージが出るはずです。また、別のターミナルウィンドウから、
$ mosquitto_pub -h broker.hivemq.com -t pythontest/set -m 'hello'
というコマンドを動かして、helloというメッセージを送れば、Pythonを動かしているウィンドウには、
% ./mqtttest.py Connection established. hello
というようにhelloの文字が表示されるはずです。
まとめ
まっさらな状態のmacOSでPython 3を動かす手順を紹介しました。Xcodeをダウンロードして、一回だけ起動してライセンス許諾すれば使用できます。macOSにPythonをインストールする方法は、他にも複数あります。それぞれ長所・短所がありますが、Appleによって初めからインストールされているPythonを活かすのがシンプルで良いと思います。
コメント