Jamf ブログ
MacBook
February 4, 2022 投稿者 Armin Briegel

幕を閉じたPython 2、そして、Pythonを用いた管理の行く末

Appleは長い間、Python 2バイナリを削除する予定とアナウンスしていましたが、ついに削除が実行されました。どのようなアクションを取るべきか、についてお話しします。

MacにPythonがインストールされている方へ

 Appleは、macOS Catalinaの最初のベータリリースノートで、MacOS X Jaguar 10.2以降Macシステムの一部であったインストール済みのPython 2バイナリは「将来的なMacOSバージョン」で削除するとアナウンスをしていました。さらにPython、Ruby、Perlなどのscripting runtimesも将来的なMacOSバージョンには含まないことも発表しました。開発者に向けたガイダンスとして、アプリ内にソリューションが依存しているランタイムを含めることが推奨されています。

今回の変更が必要な理由

2020年1月時点で、Python開発とリリースを統括する組織は、バージョン2.7以降のPythonを正式に廃止し、より新しく安全なPython 3以降のバージョンをサポートしています。つまりPython 2のライフサイクルが終了を迎え、アップデート、バグ修正、セキュリティアップデートは今後Python 3.x以降のみをサポートすることになります。

Python 3は正式な後継ですが、Pythonコードをバージョン2.xから3.xに更新することは簡単な作業ではありません。ランタイムを新しいバージョンに置き換えるだけでは機能しません。現在は並行してサポートされている様々なマイナーバージョンのPython 3についても同様です。Python 3.11がベータ版である間は、Python 3.7から3.10が現在サポートされることが証明されています(2022年2月4日現在)。

Appleは、macOSリリースノートで開発者に書面でアナウンスしたのに加え、ユーザがmacOS Montereyで非推奨のPython 2ランタイムを使用しようとするとメッセージを表示するという追加措置もとりました。こういった警告は、アップデートを必要とするアプリやスクリプトを開発者や管理者が追跡しやすくするよう作られたものであるため、エンドユーザには理解しにくいかもしれません。さらにAppleはmacOS Monterey 12.3のベータリリースノートで、/usr/bin/pythonのディレクトリを完全に削除すると述べています。

長年にわたり警告を出し、macOSから主力なプログラミングランタイムを削除してセキュリティを強化しても、このような規模の機能削除を伴うアップデートは、ユーザ、管理者、開発者にとっても問題が発生する可能性があります。Appleは、春のアップデートでエンドユーザや管理者向けの機能を追加してきましたが、マイナーなアップデートにおいて、機能を破損する可能性を持つ要素削除はこれまでの歴史になく、予想していなかったことです。

今回のようなマイナーアップデートのベータ期間は6〜8週間で、主要なシステムリリースの4〜5か月と比べて非常に短く、さらに問題を複雑にしています。そのため、コードのアップデート、アップデートのテスト、そして、ユーザのデバイスにデプロイするために、開発者とシステム管理者には与えられる時間はより短くなります。

たとえば、macOS Montereyで導入された警告のダイアログボックスによってほとんどの管理者は、Python 2.7の廃止予定に伴い、大部分のスクリプトとツールのアップデートを余儀なくされました。それにもかかわらず、これまでに利用してきたPython 2.7ランタイムへの呼び出しは予期せぬ場所に表示される場合があります。

Jamfのスクリプト

まずポリシースクリプトとJamf Proの拡張属性は、Python 2.7用に書くことができます。スクリプトは#!/usr/bin/python、または#!/usr/bin/env Python shebang と、スクリプトの先頭に表示されます。シェルスクリプトは、特定のシステム機能を利用するためにPythonを呼び出すこともできます。Jamfのエンジニアである、Laurent Pertoisが、Jamf APIを使用して、Pythonコマンドに使用するすべてのスクリプトと拡張属性を検索するスクリプトを作成しています。これを用いて、Pythonの使用状況を確認できるリストが表示できるでしょう。

現在ログインしているユーザの取得は、Pythonの一般的な用途のひとつで、そのために、シェルのみの置き換えと、JavaScript for Automation(JXA)があり、より一般的なPythonワンライナーのソリューションとして役立ちます。さらに、Jamf NationやMacAdmins Slack上で、Pythonを用いた管理の代替手段が見つかるかもしれません。

インストールスクリプトのPython

インストーラパッケージにあるプレインストール、またポストインストールスクリプトにおいてPythonスクリプトや呼び出しをよく目にすることでしょう。pkgは通常、ベンダーによって組み立てられるのでPythonスクリプトに気づかないこともあるかもしれません。私は、インストーラpkgを再帰的に検索し、コードにPython shebangやPythonツールを使ったpkgcheckというスクリプトを以前書いたことがあります。今後トラブルを引き起こす可能性のあるサードパーティのインストーラパッケージを特定するのに、このスクリプトは間違いなく役に立ちます。

Pythonを使ったスクリプトを含むpkgを特定する場合、ベンダーにmacOS 12.3以降ではインストーラが壊れることを知らせることをお薦めします。最善を尽くしても、ソフトウェアベンダーがアップデートに間に合わない場合は、Jamf Proのスマートグループを活用し、macOS 12.3以降にアップデートされたMacにパッケージをインストールすることを防げば、エンドユーザのパフォーマンスに悪影響を与えずにすみます。影響を受けたPythonのスクリプトを自分でアップデートし、デプロイのためにソフトウェアを再パッケージすることも可能ですが、インストールスクリプトによっては、難しい作業になるかもしれません。

その他のツール

Mac管理者用のオープンソースツールは多くの場合、全てPython 2で書かれています。前述のように、shebangで特定できます。shebangが/usr/bin/pythonの場合、それは組み込みのPython 2を使用しておりmacOS 12.3では動作しません。開発者向けGitHubレポジトリやウェブサイトで、macOS 12.3以降のバージョン環境で動作させるためのこういったツールのアップデートや指示が見つかる場合もあります。余裕があれば、Jamf NationやMacAdmins Slackチャンネルで、他のMac管理者から代替的な解決策となるようなアドバイスを受けることも良いでしょう。

特定の問題に対するソリューションの例としてDockUtilツールがあります。開発者が新しいPython 3バージョンの開発に取り組んでる間にも、すでにPython 3をサポートする代替ツールがDockLibで見つかるかもしれません。

Python 3 バンザイ!

Python 3はPython 2の暫定的な置き換えではなく、論理的、かつ合理的な進歩です。macOSには、Python 3バイナリが存在しますが、これはXcodeでインストールされたPythonランタイムにリダイレクトするか、ユーザにデベロッパコマンドラインツールをインストールするよう指示するプレースホルダーバイナリにすぎません。macOSに含まれるPython 3バイナリは、廃止されたPython 2の代替として適したものではありません。

以前AppleがCatalinaのリリースノートで推奨したように、信頼できるバージョンのPythonが必要な場合は、自分自身で構築するのが最善のソリューションと言えるでしょう。

DockLibの著者はMacAdmin版の Pythonの使用を推奨しており、このオープンソースプロジェクトでは、便利なPythonモジュールがプリインストールされ、予め設定されたPython 3のpkgインストーラを提供しています。 また、開発者が使用している他のバージョンのPythonとの競合を避けるため、ファイルシステム内の標準でない場所にインストールされます。

Pythonを管理ツールとして引き続き使用したい場合に、これは最善のソリューションでしょう。もうひとつの選択肢として、組織でのAppleデバイス管理において造詣が深いGreg NeagleのRelocatable Pythonツールを使用して、モジュールで独自のPythonを構築する方法があります。

どのPythonを最終的に使用するにしても、その維持とアップデートが今後、必要になることを覚えておいてください。

Pythonとの格闘

どれだけ周到に準備をしても、今回の移行によって何らかの問題が発生するでしょう。自分自身のスクリプトをチェック、アップデート、検証し、Python 2の廃止にともないツールが破損する可能性があるため、インストーラパッケージを更新するべき旨をベンダーやツールの開発者に知らせなければなりません。

macOS Monterrey 12.3において、Pythonの呼び出しをまだ利用しているソフトウェアのインストールやアプリのアップデートの延期には、Jamf Proとスマートグループに依存する必要があるかもしれません。ソフトウェアがビジネス上大変重要である場合には、Python 2に依存しているすべてのソフトウェアにパッチが適用されるまで、アップデートを12.3まで延期する必要があるかもしれません。オープンソースや自分のツールにPythonを続けて使用したい場合は、自分でバージョンを提供し、管理するという当初からAppleが推奨している内容に従うのが最善の道かもしれません。

Photo of Armin Briegel
Armin Briegel
Jamf
Armin Briegel, Senior Consulting Engineer
ブログ購読

マーケットトレンド、Apple の最新情報、Jamf のニュースをメールでお届けします。

当社がお客様の情報をどのように収集、利用、移転、および保存するかに関しては、プライバシーポリシーをご参照ください。