2.      matplotlibの導入
ここでは、3章以降の作図に必要となるmacOSへのmatplotlibの導入について解説します。Pythonのバージョンは3.11を想定しており、このバージョンに対応したパッケージを導入します。なお、バージョン3.10でも同様の方法で導入可能ですので、3.11を3.10に読み替えてください。またPython3.12を試す方法も紹介しています。インストールには、XcodeとMacPortsを使います。既に最新版のインストールが済んでいる場合は、この章を飛ばしても問題ありません。Pythonのバージョン3.10以降では、6章で使用するBasemapがMacPortsから提供されないため、pipを使ったインストール方法を紹介しています。なお、Basemapを利用しない場合には、pipを使ったインストールは必須ではありません。バージョン3.9、3.8を用いる場合は2.3節を参照してください。これらのバージョンでは、Basemapを使い特定の図法で南極大陸を描く場合に不具合が発生します。なお、バージョン3.7以前のものは既にcartopyのパッケージが提供されていません。本章ではmacOSへの導入方法を紹介していますが、pythonはWindowsやLinuxなど、他のOSでも利用することが可能となっています。また、web上でpythonを利用するための環境がGoogle等で提供されており、例えばGoogle Colaboratory（グーグル・コラボレイトリー）は無料で利用することができます。とりあえず作図を試してみたい方向けに、3章のチュートリアルをGoogle Colaboratoryで行う方法を以下のページに載せています。 https://yyousuke.github.io/matplotlib/matplotlib-tutorial.html WindowsやLinuxでは、例えばConda環境でpythonを導入可能です。 Linuxでの設定方法を以下に載せています。 https://yyousuke.github.io/matplotlib/matplotlib-install.htmlなお、CondaはmacOSでもインストール可能ですが、Conda現境ではパスの設定等が変わるため、MacPortsと一緒に使用することはお勧めしません。
2.1 MacPortsを使ったmatplotlibのインストール
2018年8月最初のアップデートで、MacPortsにpythonバージョン3.7が追加され、2019年9月にバージョン3.8が、2020年10月に3.9、2021年10月に3.10、2022年10月に3.11、2023年10月に3.12が追加されました。また、バージョン3.11に対応したパッケージが増え、本稿のサンプルプログラムを動作させるために必要なパッケージが揃ったため、本稿で用いる標準のバージョンとして3.11を用いています（2.1.1節）。MacPortsにはPython3.12のcartopyがまだありませんが、pipには含まれているため、Python3.12を試してみたい方向けに、pipを使ってPython3.12にcartopyをインストールする方法を2.1.2節で紹介しています。本節で紹介するインストールでは、2023年11月16日時点で最新のmacOS Sonoma (14.1.1)、Xcode 15.0.1、MacPorts 2.8.1を用いました。なお、macOSはSonoma  14.1〜14.4、Ventura  13.0〜13.6、アプリケーションのXcodeは11.3～15.2、MacPortsは2.6.2～2.9.3の環境で同様に動作することを確認しましたので、最新版の導入をお薦めします。なお、macOSのセキュリティアップデートは最新版から２世代前までしか提供されませんので、それ以前のOS (2023年12月にサポート終了したMonterey以前)の使用は推奨できません。 XcodeはMacのApp Storeで提供されているものです。App StoreでXcodeを検索して入手します（図2-1-1）。 Finderのアプリケーション一覧からXcode.appを起動し、追加のパッケージをインストールします(図2–1–2)。ターミナルを起動し、コマンドラインから続きの作業を行います。まず、 % sudo xcodebuild -licenseを行い、ライセンスに同意します（最後にagree）。 % sudo xcode-select --installでコマンドラインツールをインストールします(図2–1–3)。次に  MacPorts のインストールを行います。 MacPorts の提供元(https://www.macports.org/install.php)のmacOS Sonoma用のリンクからpkgファイルをダウンロードします（図2–1–4)。MacPortsはOSのバージョンに対応したものしか動作しないので、必ずOSのバージョンに対応するpkgファイルをダウンロードしてください。ダウンロードしたpkgファイルをFinderで開いてインストールします(図2インストールが完了したら、ターミナルを開き、次のコマンドでMacPortsをアップデートします。MacPortsのコマンド名がportです。selfupdateではMacPortsとパッケージのリストを最新のものに更新します。 % sudo port selfupdate
2.1.1 Python3.11の導入
本稿のサンプルプログラムを動作させるために必要なパッケージは、 python311の他にpythonを対話的に実行するためのシェルpy311-ipython、パッケージ管理のためのpy311-pip、数値計算などを行うpy311-numpy、 py311-pandas、py311-scipyと、pandasでhtmlデータを解析する時に使う、 py311-lxml、py311-html5lib、py311-beautifulsoup4です。また、作図を行うために必要なパッケージは、matplotlib本体のpy311-matplotlib、cartopy本体のpy311-cartopyの他、cartopyに必要なpy311-Pillow、py311-pyprojです。gribデータを扱うためにwgrib2、NetCDFデータを扱うためにnetcdf、 py311-netcdf4、HDFデータを扱うためにpy311-h5pyも必要です。なお作図に必要なBasemapは、pipのbasemapを利用します。 MacPortsのバージョン更新時にパッケージ名が変わることがありますので、もしパッケージ名でエラーが出た場合には、最新の情報を取得してください。 1つのパッケージには依存関係のあるパッケージが多数あるため、次の順にインストールすることで、本稿の作図を行うサンプルプログラムを動作させるのに必要なパッケージを全て含むようになります。途中で依存関係のあるパッケージをインストールするか聞かれるので、Yesの方を選択します。バージョン3.10の場合には、py311をpy310に読み替えてください。 % sudo port install py311-pandas py311-scipy % sudo port install py311-pip % sudo port install py311-Pillow py311-cartopy % sudo port install py311-ipython % sudo port install wgrib2 py311-netcdf4 py311-h5py % sudo port install py311-beautifulsoup4パッケージのインストールが一通り終わったら、次のようなコマンドでpython3、ipython3、pip3のバージョンを3.11のものにしておきます。こうしておけば、python3やipython3、pip3コマンドでバージョン3.11のものが起動します。 % sudo port select --set python3 python311 % sudo port select --set ipython3 py311-ipython % sudo port select --set pip3 pip311既にpython2のサポートが終了しているので、pythonとipython、pipコマンドもバージョン3.11にしておいて良いかもしれません。 % sudo port select --set python python311 % sudo port select --set ipython py311-ipython % sudo port select --set pip pip311次に、MacPortsでインストールしたpipコマンドでBasemapをインストールします。 % pip3 install basemap % pip3 install basemap-data-hiresここで紹介したMacPortsには、パッケージを検索する便利な機能が含まれています。この機能は次のように使います。 % port search パッケージ名の一部など古いパッケージを更新する機能もあり、次のように使います。 % sudo port selfupdate  (MacPorts とパッケージのリストを最新のものに) % sudo port upgrade outdated（古いパッケージを更新）パッケージのリストは時々更新されますが、不整合やバグを含んでいることがあるので、upgradeを実行する前に最新版で問題が起こっていないか確認したほうが良いでしょう。不整合やバグの情報は次のページにも載せています。 https://yyousuke.github.io/matplotlib/info.html MacPortsでパッケージをインストールするコマンドは、 % sudo port install パッケージ名です。例えばpython311のパッケージをインストールするコマンドは、 % sudo port install python311となります。インストールは複数のパッケージを同時に行うことができ、 % sudo port install py311-numpy py311-pandas py311-scipyのようにパッケージ名を並べます。パッケージのリストを最新のものにするport selfupdateはrsyncを利用するため、ファイアウォールの内側では利用できないことがあります。その場合にはhttpsを利用してパッケージリストを取得します。 (https://trac.macports.org/wiki/howto/PortTreeTarball) MacPortsでパッケージリストを取得する際に参照しているのは、 /opt/local/etc/macports/sources.confというファイルです。このファイルを下記のように書き換えます。 #rsync://rsync.macports.org/release/tarballs/ports.tar [default] https://github.com/macports/macports-ports/archive/master/ports.tar.gz/ [default]更新時には次のように行います。 % sudo port -d sync Basemap導入時に使用したpipコマンドも、パッケージ管理に用います。現在はMacPortsに含まれていないパッケージであっても、pipコマンドでインストールできることがあります。なお、MacPortsとpipで同じパッケージが入っていると不具合が発生することがあるので、MacPortsでインストールしたものはpipでインストールしない方が良いでしょう。またシステム側のパッケージを置き換えてしまわないように、pipはsudoを使わずに実行し、ホームディレクトリ下のLibraryにインストールされるようにしておきます。まずはインストールしたいパッケージを検索します。以前はpipに検索機能がありましたが、現在はサポート終了していますので、代わりにhttps://pypi.org/searchにパッケージ名の一部などを入力して検索します。 pipコマンドによるパッケージのインストールは、次のように行います。 % pip3 installパッケージ名パッケージの詳細を表示するには、次のように行います。 % pip3 show パッケージ名インストールしたパッケージを削除する場合には、次のように行います。 % pip3 uninstallパッケージ名pip自体のアップデートは、次のように行います。 % pip install -U pipもしpipでインストールしたものとMacPortsでインストールしたものが競合して不具合が発生した場合、以下にインストールされているpipのディレクトリを削除すると競合が解決することがあります。Pythonのバージョンに合わせて3.11の部分は読み替えてください。 % rm -r ~/Library/Python/3.11/ % pip3 install basemap % pip3 install basemap-data-hires他にもpipでインストールしたものがあれば、全て消えてしまいますので再インストールが必要となります。
2.1.2 Python3.12の導入
MacPortsでは、2024年5月現在、Python3.12にはcartopyのパッケージが提供されていないため、ここではpipを使ったインストール方法を紹介します。まずは、2.1.1節と同様にMacPortsを使って本稿に必要なパッケージをインストールしていきます。 % sudo port install py312-pandas py312-scipy % sudo port install py312-pip % sudo port install py312-Pillow % sudo port install py312-ipython % sudo port install wgrib2 py312-netcdf4 py312-h5py % sudo port install py312-beautifulsoup4次に、MacPortsでインストールしたpipコマンドでBasemapとcartopyをインストールします（~/Library/Python/3.12/以下に入ります)。 % pip install cartopy % pip3 install basemap % pip3 install basemap-data-hiresもしPython3.12をデフォルトにしておきたい場合には、次のようなコマンドを実行します。 % sudo port select --set python3 python312 % sudo port select --set ipython3 py312-ipython % sudo port select --set pip3 pip312 % sudo port select --set python python312 % sudo port select --set ipython py312-ipython % sudo port select --set pip pip312
2.2 OS更新時の手続き
macOSは、2017年６月のHigh  Sierra（10.13)、2018年10月のMojave (11.4)、2019年10月のCatalina（10.15)、2020年11月のBig  Sur（11）、 2021年10月のMonterey  (12)、2022年10月のVentura  (13)、2023年9月のSonoma (14)のように毎年更新されています。OSの更新を行った際には、 MacPortsやPythonも更新しておく必要があります。更新はmacOS、Xcode、 MacPorts、Pythonの順に行います。ハードウェアによっては最新OSに未対応のものがあり、ソフトウェアでも最新OSをサポートしていないものがあるため、もし更新する場合には事前に確認してください。 Mojave以降では「システム設定」の「一般」一「ソフトウェアアップデート」で更新を行うことができます（図2–2–1）。 Xcodeは既にインストールされている場合、OS更新時に自動更新されます。まだインストールされていない場合、2.1節の手順のようにOS更新後にApp Storeを開き、Xcodeを検索してインストールします。Xcodeを起動する際には、初期のインストール同様、追加のパッケージをインストールするか聞かれるので(図2–1–2)、インストールを行います。次にターミナルを起動し、ライセンスへの同意とコマンドラインツールのインストールを行います。初期のインストール時とは異なり、必須ではないことがあります。またXcodeを更新した場合に、同じ手続きが必要となることがあります。 % sudo xcodebuild -license （最後にagreeを入力しライセンスに同意） % sudo xcode-select --install （コマンドラインツールのインストールに同意）次に、MacPortsの提供元(https://www.macports.org/install.php)から、インストールしたOSに対応するpkgファイルをダウンロードしてインストールします（図2-1-4、図2-1-5）。インストール後、ターミナルを開きMacPortsの移行を行います。 % port -qv installed > myports.txt（パッケージ情報を保存） % sudo port -f uninstall installed （インストールされているものを削除）以下のような手順で、保存されたパッケージ情報をリストアします。その際、インストール状況によっては、途中でエラーが出て移行に失敗します。 % curl --location --remote-name https://github.com/macports/macports- contrib/raw/master/restore_ports/restore_ports.tcl % chmod +x restore_ports.tcl % sudo port selfupdate % sudo ./restore_ports.tcl myports.txtエラーが出たパッケージがあると、port cleanを求めるメッセージが出力されて止まるので、その都度、 % sudo port cleanパッケージ名を行った後、手動でport installを実行してインストールをやり直します。既に多くのパッケージが入っている場合には、何度もインストールのやり直しが必要になることがあります。その場合には、最初から手動でpython関連のパッケージをインストールする方が簡単です。最初にインストールした時同様に、次の手順でインストールしていきます。 % sudo port install py311-pandas py311-scipy % sudo port install py311-pip % sudo port install py311-Pillow py311-cartopy % sudo port install py311-ipython % sudo port install wgrib2 py311-netcdf4 py311-h5py % sudo port install py311-beautifulsoup4なお、設定によってはXcodeコマンドラインツールのバージョンを認識できない場合があります。その際には、 https://trac.macports.org/wiki/ProblemHotlist#reinstall-cltにアクセスして、Apple  Developer  siteから対応するバージョンのものをダウンロードして下さい（図2–2–2）。
2.3 Python3.9、3.8
Python3.8～3.9では、Basemap1.2.2で行われた更新後に、Basemapを使い特定の図法で南極大陸を描く場合に不具合が発生します。具体的には、南極大陸が描かれないか東半球側にしか描かれないケースがあります。現在確認しているものは、正距円筒図法、モルワイデ図法、ロビンソン図法、ランベルト正積円筒図法、ミラー図法です。このため、6章のサンプルプログラムで、これらの図法では本稿の図とは南極大陸の地図表示が異なります。なお、正射投影図法、ランベルト正角円錐図法、極投影図法、正距方位図法については問題なく作図できます。 MacPortsでpython3.9を導入するには、次の手順で行います。MacPortsのインストールまでは、2.1節と同じ手順を用います。バージョン3.8の場合は、 py39などをpy38に読み替えてください。 % sudo port install py39-pandas py39-scipy % sudo port install py39-matplotlib-basemap py39-cartopy % sudo port install wgrib2 py39-netcdf4 py39-h5py % sudo port install py39-beautifulsoup4 % sudo port install py39-pip % sudo port install py39-ipythonパッケージのインストールが一通り終わったら、次のようなコマンドでpython3、ipython3、pip3のバージョンを3.9のものにしておきます。こうしておけば、python3やipython3、pip3コマンドでバージョン3.9のものが起動します。 % sudo port select --set python3 python39 % sudo port select --set ipython3 py39-ipython % sudo port select --set pip3 pip39次の設定で、pythonとipython、pipコマンドもpython3.9で起動します。 % sudo port select --set python python39 % sudo port select --set ipython py39-ipython % sudo port select --set pip pip39