5. macOS で Python を使う
*************************

このドキュメントでは、Mac コンピュータで Python を使い始める際に知って
おくべき、macOS 固有の挙動を概説します。 macOS を実行する Mac 上の
Python は、ほかの Unix 派生プラットフォーム上の Python と非常によく似
ていますが、インストール方法や一部の機能には違いがあります。

macOS 用の Python を入手してインストールする方法はいくつかあります。
最近の Python のバージョンは、複数の配布元からビルド済みのものを入手で
きます。 このドキュメントの大部分では、CPython リリースチームが
python.org のウェブサイト でダウンロード用に提供している Python の使い
方を説明します。 ほかの選択肢については ほかの配布物 を参照してくださ
い。


5.1. "python.org" の macOS 用 Python を使う
===========================================


5.1.1. インストール手順
-----------------------

リリースチームは、現在の Python バージョン ("security" 状態のものを除
く) のリリースごとに、**Python for macOS** インストーラパッケージを作
成します。 利用できるインストーラの一覧は macOS のダウンロードページ
にあります。 可能な限り、サポートされている最新の Python バージョンの
使用を推奨します。 現在のインストーラは、幅広い macOS バージョンに対応
するすべての Mac (Apple Silicon と Intel) 上でネイティブに動作する、
Python の universal2 バイナリ ビルドを提供します。 対応する macOS は、
現在では通常、少なくとも **macOS 10.15 Catalina** 以降です。

ダウンロードされるファイルは、標準の macOS インストーラパッケージファ
イル (".pkg") です。 各ファイルの整合性情報 (チェックサム、サイズ、
Sigstore 署名など) は、リリースのダウンロードページに掲載されています
。 インストーラパッケージとその内容は、macOS Gatekeeper の要件 を満た
すように、"Python Software Foundation" の Apple Developer ID 証明書を
使って署名と公証が行われています。

デフォルトのインストールを行うには、ダウンロードしたインストーラパッケ
ージファイルをダブルクリックします。 標準の macOS Installer アプリが起
動し、いくつかあるインストール手順の最初の画面が表示されるはずです。

[画像]

**Continue** ボタンをクリックすると、このインストーラの **Read Me** が
表示されます。 **Read Me** には、インストールする Python のバージョン
と、そのバージョンがサポートする macOS のバージョンなど、重要な情報が
記載されています。 ファイル全体を読むには、スクロールが必要な場合があ
ります。 デフォルトでは、この **Read Me** も "/Applications/Python
3.15/" にインストールされ、いつでも読めるようになります。

[画像]

**Continue** をクリックすると、Python および同梱されるほかのソフトウェ
アのライセンスが表示されます。 次の手順に進むには、ライセンス条項に
**Agree** で同意する必要があります。 このライセンスファイルもインスト
ールされ、後で読むことができます。

[画像]

ライセンス条項に同意すると、次に **Installation Type** 画面が表示され
ます。 ほとんどの用途では、標準のインストール内容が適切です。

[画像]

**Customize** ボタンを押すと、インストーラの特定のパッケージ構成要素を
選択したり、選択を解除したりできます。 パッケージ名をクリックすると、
そのパッケージがインストールするものの説明が表示されます。 デフォルト
でインストールされるオプションのフリースレッド機能については、フリース
レッドバイナリのインストール を参照してください。

[画像]

どちらの場合も、**Install** をクリックすると、新しいソフトウェアをイン
ストールするための許可を求めてインストール処理が始まります。 インスト
ールした Python はその Mac のすべてのユーザーが利用できるため、
"Administrator" 権限のある macOS ユーザー名が必要です。

インストールが完了すると、**Summary** ウィンドウが表示されます。

[画像]

"/Applications/Python 3.15/" ウィンドウで **Install
Certificates.command** のアイコンまたはファイルをダブルクリックして、
インストールを完了します。

[画像]

一時的な **Terminal** シェルウィンドウが開き、新しい Python を使って、
その Python 用の SSL ルート証明書をダウンロードしてインストールします
。

[画像]

ターミナルウィンドウに "Successfully installed certifi" と "update
complete" が表示されれば、インストールは完了です。 このターミナルウィ
ンドウとインストーラウィンドウを閉じてください。

デフォルトのインストールには、次のものが含まれます:

* "Applications" フォルダ内の "Python 3.15" フォルダ。 このフォルダに
  は、公式の Python 配布物に標準で含まれる開発環境 **IDLE** と、macOS
  の Finder で Python スクリプトをダブルクリックしたときの処理を担う
  **Python Launcher** があります。

* A framework "/Library/Frameworks/Python.framework", which includes
  the Python executable and libraries. The installer adds this
  location to your shell path. To uninstall Python, you can remove
  these three things. Symlinks to the Python executable are placed in
  "/usr/local/bin/".

注釈:

  最近の macOS には、"/usr/bin/python3" に **python3** コマンドが含ま
  れています。 これは、Apple の開発ツールである **Xcode** または
  **Command Line Tools for Xcode** によって、それらのツールで使用する
  ために提供される Python にリンクしており、通常は古く、不完全なバージ
  ョンです。 この Python は Apple が管理し、Apple 製やサードパーティの
  ソフトウェアが使用するため、決して変更したり、削除しようとしたりしな
  いでください。 "python.org" から新しいバージョンの Python をインスト
  ールすると、コンピュータには異なる 2 つの Python 環境が存在すること
  になりますが、両方とも動作し、共存できます。 インストーラのデフォル
  トのオプションでは、システムの **python3** に代わって、インストール
  した **python3** が使用されるはずです。


5.1.2. Python スクリプトの実行方法
----------------------------------

Python インタープリタを起動するには 2 つの方法があります。 ターミナル
ウィンドウで Unix シェルを使い慣れている場合は、"python3.15" または
"python3" を実行できます。 必要に応じて、1 つ以上のコマンドラインオプ
ション (コマンドラインと環境 で説明) をその後に指定できます。 Python
チュートリアルの シェルから Python を対話的に使用する 節も参考になりま
す。

統合開発環境からインタープリタを起動することもできます。 IDLE ---
Python のエディタとシェル は、Python の標準配布物に含まれる基本的なエ
ディタとインタープリタの環境です。 **IDLE** の Help メニューから
Python のドキュメントを参照できます。 Python を初めて使う場合は、その
ドキュメントにあるチュートリアルの導入部分を読むとよいでしょう。

ほかにも多くのエディタや IDE を利用できます。 詳細は エディタと IDE を
参照してください。

ターミナルウィンドウから Python スクリプトファイルを実行するには、スク
リプトファイル名を指定してインタープリタを起動します:

   "python3.15" "myscript.py"

Finder からスクリプトを実行するには、次のいずれかの方法を使います:

* スクリプトを **Python Launcher** にドラッグします。

* Finder の情報ウィンドウで、スクリプト (または任意の ".py" スクリプト
  ) を開くデフォルトのアプリケーションとして **Python Launcher** を選
  択し、スクリプトをダブルクリックします。 **Python Launcher** には、
  スクリプトの起動方法を制御するさまざまな環境設定があります。 Option
  キーを押しながらドラッグすると、今回の起動に限って設定を変更できます
  。 全体の設定を変更するには、"Preferences" メニューを使います。

macOS の Finder から直接スクリプトを実行すると、ターミナルウィンドウか
ら実行した場合と結果が異なることがあります。 シェルのプロファイルでの
環境変数の設定など、通常のシェル環境でスクリプトが実行されるわけではな
いためです。 また、ほかのスクリプトやプログラムを実行するときと同様に
、何を実行しようとしているかを確認してください。


5.2. ほかの配布物
=================

macOS 用の標準の "python.org" インストーラに加えて、追加の機能を含む場
合があるサードパーティの macOS 用配布物もあります。 よく使われる配布物
とその主な特徴を紹介します:

ActivePython
   複数のプラットフォームに対応するインストーラ、ドキュメント

Anaconda
   よく使われる科学計算モジュール (numpy、scipy、pandas など) と
   "conda" パッケージマネージャ。

Homebrew
   複数バージョンの Python と、Python に基づく多くのサードパーティパッ
   ケージ (numpy、scipy、pandas など) を含む macOS 用パッケージマネー
   ジャ。

MacPorts
   複数バージョンの Python と、Python に基づく多くのサードパーティパッ
   ケージを含む、もう一つの macOS 用パッケージマネージャ。 古い macOS
   バージョン用にビルドされた Python や多くのパッケージを含む場合があ
   ります。

これらの配布物には最新バージョンの Python やほかのライブラリが含まれて
いないことがあり、Python のコアチームによる保守やサポートも行われてい
ない点に注意してください。


5.3. 追加の Python パッケージのインストール
===========================================

詳細は Python Packaging User Guide を参照してください。


5.4. GUI プログラミング
=======================

Python で Mac 上の GUI アプリケーションをビルドする方法がいくつかあり
ます。

Python の標準 GUI ツールキットは、複数のプラットフォームに対応する Tk
ツールキット (https://www.tcl.tk) を基にした "tkinter" です。 インスト
ーラには、macOS でネイティブに動作するバージョンの Tk が含まれています
。

*PyObjC* は、Apple の Objective-C/Cocoa フレームワークの Python バイン
ディングです。 PyObjC についての情報は pyobjc を参照してください。

macOS 用の GUI ツールキットには、次のようなほかの選択肢もあります:

* PySide: Qt GUI ツールキット の公式 Python バインディング。

* PyQt: Qt 用の別の Python バインディング。

* Kivy: デスクトップとモバイルのプラットフォームに対応する GUI ツール
  キット。

* Toga: BeeWare Project の一部で、デスクトップ、モバイル、ウェブ、コン
  ソールのアプリに対応します。

* wxPython: 複数のデスクトップ OS に対応するツールキット。

* Flet: Python でデスクトップ、モバイル、ウェブの複数のプラットフォー
  ムに対応するアプリケーションを作成するためのフレームワーク。


5.5. 高度な話題
===============


5.5.1. フリースレッドバイナリのインストール
-------------------------------------------

Added in version 3.13.

バージョン 3.15 で変更: フリースレッドのサポートがデフォルトでインスト
ールされるようになりました。

"python.org" の Python for macOS インストーラパッケージは、デフォルト
で *フリースレッド* (*グローバルインタープリタロック* を無効にした実行
) をサポートする Python 3.15 の追加ビルドをインストールします。 更新情
報があるかどうか、"python.org" のリリースページを確認してください。

フリースレッドモードは動作し、改良も続けられていますが、単一スレッドで
の処理には通常のビルドと比べていくらか追加のオーバーヘッドがあります。
また、サードパーティパッケージ、特に *拡張モジュール* を含むものは、フ
リースレッドビルドでの使用に対応しておらず、*GIL* を再び有効にする場合
があります。 Python 3.15 以降、フリースレッドのサポートはデフォルトで
インストールされます。 これは個別のインストールオプションとして提供さ
れており、前述のように、インストーラの **Installation Type** 手順で
**Customize** ボタンをクリックすると選択を解除できます。

[画像]

**Free-threaded Python** パッケージ名の横にあるボックスにチェックが入
っている場合 (デフォルトでは入っています)、"/Library/Frameworks" 内で
通常の "Python.framework" と並んで、別の "PythonT.framework" もインス
トールされます。 この構成により、システム上でフリースレッドの Python
3.15 ビルドと従来の (GIL を使う方式のみの) Python 3.15 ビルドを共存さ
せ、インストールやテストの際のリスクを最小限に抑えられます。 このイン
ストールの配置は、将来のリリースで変更される可能性があります。

既知の注意点と制限:

* デフォルトで選択されている **UNIX command-line tools** パッケージは
  、フリースレッドインタープリタである "python3.15t" と、パッケージの
  ビルド時に役立つ場合がある設定用ユーティリティ "python3.15t-config"
  のリンクを "/usr/local/bin" にインストールします。 通常、
  "/usr/local/bin" はシェルの "PATH" に含まれるため、ほとんどの場合、
  "python3.15t" を使うために "PATH" 環境変数を変更する必要はないはずで
  す。

* このリリースでは、**Shell profile updater** パッケージと、
  "/Applications/Python 3.15/" にある "Update Shell Profile.command"
  は、フリースレッドパッケージに対応していません。

* フリースレッドビルドと従来のビルドでは、検索パスと "site-packages"
  ディレクトリがそれぞれ別になっています。 そのため、デフォルトでは、
  両方のビルドでパッケージを使いたい場合は、両方にインストールする必要
  があるかもしれません。 フリースレッドパッケージは、"python3.15t" 用
  に別の **pip** をインストールします。

  * **venv** を使わずに **pip** でパッケージをインストールするには、次
    のようにします:

       python3.15t -m pip install <package_name>

* 複数の Python 環境を使用する場合は、通常、仮想環境を作成して使用する
  のが最も安全で簡単です。 これにより、コマンド名が衝突したり、どの
  Python を使用しているか分からなくなったりするのを避けられます:

     python3.15t -m venv <venv_name>

  続いて **activate** を実行します。

* フリースレッド版の IDLE を実行するには、次のようにします:

     python3.15t -m idlelib

* どちらのビルドのインタープリタも同じ PYTHON 環境変数 を参照するため
  、例えばシェルのプロファイルで "PYTHONPATH" を設定していると、予期し
  ない結果になる場合があります。 必要に応じて、"-E" のような コマンド
  ラインオプション を使い、これらの環境変数を無視できます。

* フリースレッドビルドは、従来のフレームワークにインストールされた
  "OpenSSL" や "Tk" などのサードパーティの共有ライブラリにリンクします
  。 そのため、両方のビルドは **Install Certificates.command** スクリ
  プトでインストールした信頼証明書も共有するので、このスクリプトは一度
  実行するだけで済みます。

* "/usr/local/bin" 内のリンクが "python.org" のフリースレッド版
  "python3.15t" を指すとは限らない場合 (例えば、その場所に自分のバージ
  ョンをインストールしたい場合や、ほかの配布物がインストールする場合)
  、シェルの "PATH" 環境変数に "PythonT" フレームワークの "bin" ディレ
  クトリを明示的に追加できます:

     export PATH="/Library/Frameworks/PythonT.framework/Versions/3.15/bin":"$PATH"

  従来のフレームワークのインストールでも、対象が "Python.framework" で
  ある以外は、デフォルトで同様の処理を行います。 両方のフレームワーク
  の "bin" ディレクトリを "PATH" に含めると、両方に "python3.15" のよ
  うな同名のコマンドがある場合に混乱を招くことがあります。 実際にどち
  らが使われるかは、"PATH" 内での順序によって決まります。 "which
  python3.x" または "which python3.xt" コマンドで、どのパスが使われる
  か確認できます。 仮想環境を使うと、このような曖昧さを避けるのに役立
  ちます。 目的のインタープリタに対して、次のようにシェルの **alias**
  を作成する方法も考えられます:

     alias py3.15="/Library/Frameworks/Python.framework/Versions/3.15/bin/python3.15"
     alias py3.15t="/Library/Frameworks/PythonT.framework/Versions/3.15/bin/python3.15t"


5.5.2. コマンドラインからのインストール
---------------------------------------

"python.org" のインストーラパッケージを、使い慣れた macOS の
**Installer** GUI アプリではなく、自動化によってインストールしたい場合
、macOS のコマンドラインの **installer** ユーティリティでも、デフォル
ト以外のオプションを選択できます。 **installer** に慣れていないと、や
や分かりにくいかもしれません (詳細は **man installer** を参照)。 例と
して、次のシェルスクリプトの断片は、"3.15.0b2" リリースを使い、フリー
スレッドインタープリタのオプションを選択解除する方法を示します:

   RELEASE="python-3.15.0b2-macos11.pkg"

   # download installer pkg
   curl -O https://www.python.org/ftp/python/3.15.0/${RELEASE}

   # create installer choicechanges to customize the install:
   #    disable the PythonTFramework-3.15 package
   #    while accepting the other defaults (install all other packages)
   cat > ./choicechanges.plist <<EOF
   <?xml version="1.0" encoding="UTF-8"?>
   <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
   <plist version="1.0">
   <array>
           <dict>
                   <key>attributeSetting</key>
                   <integer>0</integer>
                   <key>choiceAttribute</key>
                   <string>selected</string>
                   <key>choiceIdentifier</key>
                   <string>org.python.Python.PythonTFramework-3.15</string>
           </dict>
   </array>
   </plist>
   EOF

   sudo installer -pkg ./${RELEASE} -applyChoiceChangesXML ./choicechanges.plist -target /

デフォルトのインストール後、例えば次のようにして、両方のビルドが利用で
きることを確認できます:

   $ # test that the free-threaded interpreter was installed if the Unix Command Tools package was enabled
   $ /usr/local/bin/python3.15t -VV
   Python 3.15.0b2 free-threading build (v3.15.0b2:3a83b172af, Jun  5 2024, 12:57:31) [Clang 15.0.0 (clang-1500.3.9.4)]
   $ #    and the traditional interpreter
   $ /usr/local/bin/python3.15 -VV
   Python 3.15.0b2 (v3.15.0b2:3a83b172af, Jun  5 2024, 12:50:24) [Clang 15.0.0 (clang-1500.3.9.4)]
   $ # test that they are also available without the prefix if /usr/local/bin is on $PATH
   $ python3.15t -VV
   Python 3.15.0b2 free-threading build (v3.15.0b2:3a83b172af, Jun  5 2024, 12:57:31) [Clang 15.0.0 (clang-1500.3.9.4)]
   $ python3.15 -VV
   Python 3.15.0b2 (v3.15.0b2:3a83b172af, Jun  5 2024, 12:50:24) [Clang 15.0.0 (clang-1500.3.9.4)]

注釈:

  現在の "python.org" インストーラは、"/Library/Frameworks/"、
  "/Applications"、"/usr/local/bin" などの決められた場所にのみインスト
  ールします。 **installer** の "-domain" オプションを使って、ほかの場
  所にインストールすることはできません。


5.5.3. Python アプリケーションの配布
------------------------------------

Python コードをスタンドアローンな配布アプリケーションに変換するツール
には様々なものがあります:

* py2app: Python プロジェクトから macOS の ".app" バンドルを作成できま
  す。

* Briefcase: BeeWare Project の一部で、複数のプラットフォームに対応す
  るパッケージングツールです。 macOS 上での ".app" バンドルの作成や、
  署名と公証の管理に対応します。

* PyInstaller: 複数のプラットフォームに対応するパッケージングツールで
  、配布物として単一のファイルまたはフォルダを作成します。


5.5.4. App Store の要件への適合
-------------------------------

macOS App Store を通じて配布するために提出するアプリは、Apple のアプリ
審査に合格する必要があります。 この審査には、提出されたアプリケーショ
ンバンドル内に問題のあるコードがないかを調べる、一連の自動検証ルールが
含まれています。

Python 標準ライブラリには、これらの自動ルールに違反することが分かって
いるコードが含まれています。 これらの違反は誤検出と思われますが、Apple
の審査ルールに異議を唱えることはできません。 そのため、アプリが App
Store の審査に合格するには、Python 標準ライブラリを変更する必要があり
ます。

Python ソースツリーには、App Store の審査で問題を引き起こすことが分か
っているコードをすべて削除する パッチファイル が含まれています。 この
パッチは、CPython の configure に "--with-app-store-compliance" オプシ
ョンを指定した場合に自動で適用されます。

Mac 上で CPython を使用するために、通常このパッチは必要ありません。
macOS App Store の *外* でアプリを配布する場合にも必要ありません。 こ
のパッチが必要になるのは、macOS App Store を配布経路として使用する場合
*だけ* です。


5.6. その他のリソース
=====================

python.org のヘルプページ には、多くの役立つリソースへのリンクがありま
す。 Pythonmac-SIG メーリングリスト も、Mac 上で Python を使うユーザー
や開発者に特化したサポートリソースです。
