MacPortsでのXZ Utilsについて(2024/04/01)
2024年3月末にXZ Utilsの脆弱性(CVE-2024-3094)が公表されました。この脆弱性の影響を受けているバージョンでは、XZ Utilsに悪意のあるコードが挿入されており、必要な対処の実施が推奨されています(JPCERT)。MacPortsでは、この脆弱性の影響を受けるバージョン5.6.1に更新されていましたが、3月末に影響を受けないバージョン5.4.6にダウングレードされました(MacPorts XZ Utils)。
XZ Utilsのバージョンは
XZ Utilsのバージョンは
% strings /opt/local/bin/xz |grep '(XZ Utils)'で確認可能です。もし脆弱性の影響を受けるバージョン5.6.0か5.6.1が表示された場合には、次のように最新版に更新してください。
% sudo port selfupdate % sudo port upgrade outdated
cartopyでのlgeosインポートエラー(2023/06/04)
2023年5月のアップデートに伴い、MacPortsでインストールされるshapelyのバージョンが1.8.5から2.0.1になりました。このバージョンでは、cartopyy-0.21.0が内部でインポートしているlgeosが含まれないようになったため、以下のようなImportErrorが発生します(Python3.10の場合のエラーメッセージ例)。このエラーは、cartopyインポート時に不可避な部分で発生しており、shapely-2.0.1のアップデートが適用されてしまった場合には、shapelyのバージョンを1.8.5に戻す必要があります。なお、2023/06/09にMacPortsで更新されたcartopy-0.21.1で一連の不具合が解消されたため、MacPortsで取得できる最新版への更新をお薦めします。
>>> import cartopy
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/opt/local/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/cartopy/__init__.py", line 107, in <module>
import cartopy.crs # noqa: E402 module-level imports
File "/opt/local/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/cartopy/crs.py", line 27, in <module>
import cartopy.trace
File "lib/cartopy/trace.pyx", line 56, in init cartopy.trace
ImportError: cannot import name lgeos
このエラーは、cartopyのインポート時に内部でインポートされるcartopy.traceでlgeosをインポートできないことを表しています。このlgeosがshapely.geosに含まれていないため、以下でも同じエラーとなります。
>>> from shapely.geos import lgeos
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: cannot import name 'lgeos' from 'shapely.geos' (/opt/local/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/shapely/geos.py)
解決策としては、shapelyのバージョンを次のように1.8.5に戻します。コマンド中のpy310はpythonのバージョンに合わせて読み替えてください。
インストールされているバージョンの確認 % port installed py310-shapely The following ports are currently installed: py310-shapely @1.8.5_1 py310-shapely @2.0.1_1 (active) 現在のバージョンをdeactivateし、1.8.5_1をactivate % sudo port deactivate py310-shapely % sudo port activate py310-shapely @1.8.5_1 確認 % port installed py310-shapely The following ports are currently installed: py310-shapely @1.8.5_1 (active) py310-shapely @2.0.1_1
matplotlibのimportエラー(2023/04/09)
MacPortsで導入したPython3.9でmatplotlibをimport(import matplotlib.pyplot)する際に
回避するためには、次のようにimportlib_resourcesを追加します。
ModuleNotFoundError: No module named 'importlib_resources'
が出ることがあります。
回避するためには、次のようにimportlib_resourcesを追加します。
% sudo port install py39-importlib-resources
cartopyの地図データ取得時の不具合解消(2021/09/03)
cartopyでは、最初に地図を描く際に地理情報データを取得しています。取得する地理情報データは、Natural Earth地図データでですが、データを提供しているサーバへアクセスできない状態になっていたため、新規ダウンロードが発生する場合にはエラーとなっていました。本日、Natural Earth地図データへのアクセスが再開し、現在は正常に描画できるようになりました。
Basemapで南極大陸を描く際の不具合について(2021/07/31)
Basemap1.2.2で行われた更新後に、一部の図法で南極大陸が描かれないか東半球側にしか描かれない不具合が発生しています。
現在確認しているものは、正距円筒図法、モルワイデ図法、ロビンソン図法、ランベルト正積円筒図法、ミラー図法です。なお、正射投影図法、ランベルト正角円錐図法、極投影図法、正距方位図法については問題なく作図できています。
回避するためには、次のように経度の中心を-180°とします。2023/01現在、東経/西経180°のみ正常に作図できます。
回避するためには、次のように経度の中心を-180°とします。2023/01現在、東経/西経180°のみ正常に作図できます。
m = Basemap(projection='cyl', lon_0=-180)(正距円筒図法の場合)
気象庁HP更新に伴うサンプルプログラムの動作確認について(2021/02/24)
本日13時に気象庁ホームページが大幅に更新され、各種リンクが変更となりました。
「気象データ解析のためのmatplotlibの使い⽅」のサンプルプログラムでは、気象庁ホームページのデータをスクレイピングしていることから、ホームページリニューアル後に動作確認を行いました。スクレイピングしているアメダスデータのリンクに変更がないため、現時点でサンプルプログラムが正常に動作することを確認できました。
一方、imshow_sample2.pyに限っては、ひまわりの可視・赤外画像をダウンロードしており、リニューアルに伴うリンク切れにより、現在は正常にダウンロードを行うことができません。
*2021/09/03版時点で地図データ取得時の不具合が解消されました
一方、imshow_sample2.pyに限っては、ひまわりの可視・赤外画像をダウンロードしており、リニューアルに伴うリンク切れにより、現在は正常にダウンロードを行うことができません。
*2021/09/03版時点で地図データ取得時の不具合が解消されました
macOS Big Sur対応について(2020/11/27)
macOS Big Sur対応のMacPortsが11/15に提供開始されました。MacPortsを使いpython3.8の更新をテストしていましたが、現時点で「気象データ解析のためのmatplotlibの使い⽅」のサンプルプログラムの実行に必要な環境が整っていることを確認できました。
なおBasemapは修正が行われていませんので、コードの修正が必要です。また、次のような警告が出ることがあります。
なおBasemapは修正が行われていませんので、コードの修正が必要です。また、次のような警告が出ることがあります。
/opt/local/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pyproj/__init__.py:73: UserWarning: Valid PROJ data directory not found. Either set the path using the environmental variable PROJ_LIB or with `pyproj.datadir.set_data_dir`. warnings.warn(str(err))この場合には、
export PROJ_LIB=/opt/local/lib/proj7/share/projを行います。
Basemapをインポートできない不具合の解決方法(2020/07/25)
2020年7月20日頃のアップデートに伴い、MacPortsでインストールされるmatplotlibがバージョン3.2.2から3.3.0になりました。それに伴いmatplotlib.cbookではdedent関数が削除されました。
他方、Basemapはバージョン1.2.1のまま更新されないので、mpl_toolkits.basemapをインポートしようとした際に、存在しないdedent関数を呼び出そうとしてエラーが発生します。このエラーはBasemap使用時に不可避な部分で発生しており、既にアップデートが適用されてしまった場合には、修正を行わないとBasemapが使用できません。
以下は、pythonバージョン3.8の場合に出力されるエラーの内容です。バージョン3.6や3.7でも同様のエラーが発生します。
以下は、pythonバージョン3.8の場合に出力されるエラーの内容です。バージョン3.6や3.7でも同様のエラーが発生します。
File"/opt/local/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/mpl_toolkits/basemap/__init__.py", line 50, in <module> from .proj import Proj File"/opt/local/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/mpl_toolkits/basemap/proj.py", line 6, in <module> from matplotlib.cbook import dedent ImportError: cannot import name 'dedent' from 'matplotlib.cbook' (/opt/local/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/matplotlib/cbook/__init__.py)
- 解決法1:Basemap1.2.1のコードを修正
(MacPortsで導入したpython3.8の場合、/opt/local/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/mpl_toolkits/basemap/proj.py)の6行目from matplotlib.cbook import dedent
を以下のように修正します。パスの3.7の部分はpythonのバージョンによって異なり、バージョン3.6.xなら3.6、バージョン3.7.xなら3.7です。try: from inspect import cleandoc as dedent except ImportError: from matplotlib.cbook import dedent
- 解決法2:matplotlibをバージョン3.3.0から3.2.2に戻す
現在インストールされているバージョンを表示(python3.6ならpy36-matplotlib、3.7ならpy37-matplotlibに変える)% port installed py38-matplotlib The following ports are currently installed: py38-matplotlib @3.2.2_0+cairo+webagg py38-matplotlib @3.3.0_1+cairo+webagg (active)
次のようにバージョン3.3.0を deactivateして、バージョン3.2.2をactivateする。% sudo port deactivate py38-matplotlib @3.3.0_1+cairo+webagg % sudo port activate py38-matplotlib @3.2.2_0+cairo+webagg % port installed py38-matplotlib The following ports are currently installed: py38-matplotlib @3.2.2_0+cairo+webagg (active) py38-matplotlib @3.3.0_1+cairo+webagg
Pandas1.0.0のDataFrameで.ix廃止(2020/02/05)
2020年2月最初のMacPortsで導入されるpandas-1.0.0では、以前のバージョン0.7.3までwarningが出るものの使用できたDataFrameの.ixが廃止されました。
それに伴い、pythonで.ixを使うプログラムを実行すると、次のようなエラーが発生します。
*DataFrameで.ixを利用している場合、スクリプト実行時のWarning表示を消すに記載された方法で、.locか.ilocに変更する必要があります。
サンプルプログラムやドキュメントの該当箇所の更新は、しばらくお待ちください。
*2020/02/23版のサンプルプログラムで対応しました
それに伴い、pythonで.ixを使うプログラムを実行すると、次のようなエラーが発生します。
"/opt/local/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pandas/core/generic.py", line 5273, in __getattr__ return object.__getattribute__(self, name) AttributeError: 'DataFrame' object has no attribute 'ix'
*DataFrameで.ixを利用している場合、スクリプト実行時のWarning表示を消すに記載された方法で、.locか.ilocに変更する必要があります。
サンプルプログラムやドキュメントの該当箇所の更新は、しばらくお待ちください。
*2020/02/23版のサンプルプログラムで対応しました
解決法:正射投影図法で北緯45度より北側を中心にした場合の不具合(2020/02/01)
2019年12月10日頃から発生している正射投影図法で北緯45度より北側を中心にした場合の不具合について、GitHubに修正方法が記載されたことを、NOAAの方に教えて頂きました。
Basemap1.2.1のコード(MacPortsで導入したpython3.8の場合、/opt/local/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/mpl_toolkits/basemap/__init__.py)について、1428行目と1429行目の間に次の1行を挿入する修正を行います。パスの3.7の部分はpythonのバージョンによって異なり、バージョン3.6.xなら3.6、バージョン3.7.xなら3.7です。
Basemap1.2.1のコード(MacPortsで導入したpython3.8の場合、/opt/local/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/mpl_toolkits/basemap/__init__.py)について、1428行目と1429行目の間に次の1行を挿入する修正を行います。パスの3.7の部分はpythonのバージョンによって異なり、バージョン3.6.xなら3.6、バージョン3.7.xなら3.7です。
b = np.where(np.isposinf(np.where(np.isneginf(b),-1.e20,b)),1.e20,b)*Basemapバージョン1.2.2で修正されました
正射投影図法で北緯45度より北側を中心にした場合の不具合(2019/12/12)
2019年12月10日頃から、Basemapの正射投影図法で作図を行う際に、中心の緯度(lon_0)を北緯45度より北側に指定すると、次のようなエラーでpythonが落ちるようになっています。なお、テストした際のGEOSはバージョン3.8.0、Basemapは1.2.1です(MacPorsで導入される最新版)。
*Basemapバージョン1.2.2で修正されました
GEOS_ERROR: b'IllegalArgumentException: CGAlgorithmsDD::orientationIndex encountered NaN/Inf numbers' Segmentation fault: 11現在のところ、lon_0の範囲を-90から45までにするしか回避方法はありません。
*Basemapバージョン1.2.2で修正されました
Basemap1.2.1で一連の不具合解消(2019/11/08)
2019年10月から11月始め頃のMacPorts更新の際に適用されるBasemapのバージョンが、1.2.0から1.2.1へ更新されました。それにより、Basemapで発生していた以下の不具合が解消されています。
2019年4月頃から発生しているepsgファイル読み込みの不具合
2019年8月頃から発生しているtriオプションの問題
現時点の最新版であるmatplotlibバージョン3.1.0+Basemap1.2.1への更新を推奨します。
python3.6では、py36-matplotlib、py36-matplotlib-basemapのパッケージ名、python3.7では、py37-matplotlib、py37-matplotlib-basemapのパッケージ名です。
2019年4月頃から発生しているepsgファイル読み込みの不具合
2019年8月頃から発生しているtriオプションの問題
現時点の最新版であるmatplotlibバージョン3.1.0+Basemap1.2.1への更新を推奨します。
python3.6では、py36-matplotlib、py36-matplotlib-basemapのパッケージ名、python3.7では、py37-matplotlib、py37-matplotlib-basemapのパッケージ名です。
ログプロットの不具合がmatplotlib3.1.1で解消(2019/08/30)
2019年5月末から6月始め頃のmatplotlibの更新後(バージョン3.1.0)、y軸をログスケールに取りy軸の値を逆転させた場合(例えば、10 hPaを上端、1000 hPaを下端に取る場合)、正しく設定を行なってもy軸の値が逆転しない(10 hPaが下、1000 hPaが上のまま)という問題が発生していました。なお、ログスケールに設定しない場合には問題は発生していません。この問題は、2019年8月末のmatplotlib-3.1.1への更新時に解消されました。バージョン3.1.0で不具合が発生している場合には、バージョン3.1.1へ更新してください。
なおMacPortsによる自動更新(port upgrade outdated)を行った場合には、2019年4月頃から発生しているbasemapの問題やBasemapでtriオプション使用不可となる問題が引き続き発生するため、自動更新は推奨されません。
なおMacPortsによる自動更新(port upgrade outdated)を行った場合には、2019年4月頃から発生しているbasemapの問題やBasemapでtriオプション使用不可となる問題が引き続き発生するため、自動更新は推奨されません。
- バージョン3.1.0における不具合:以下の設定を行なってもy軸の値が逆転しない
- 例1:ax.invert_yaxis()を使う
ax.plot(data_x, pres, color='k') ax.set_yscale("log") ax.invert_yaxis() ax.set_ylim([10, 1000])
data_x:x軸のデータ、pres:y軸の気圧データ(hPa) - 例2:plt.gca().invert_yaxis()を使う
ax.plot(data_x, pres, color='k') ax.set_yscale("log") plt.gca().invert_yaxis() ax.set_ylim([10, 1000])
- 例3:set_ylimで下端(1000 hPa)を先、上端(10 hPa)を後に書く
ax.plot(data_x, pres, color='k') ax.set_yscale("log") ax.set_ylim([1000, 10])
- 例4:ax.set_ylimで上端と下端を逆転させた値を設定
ax.plot(data_x, pres, color='k') ax.set_ylim(ax.get_ylim()[::-1])
- 例1:ax.invert_yaxis()を使う
MacPorts更新後のBasemapでtriオプション使用不可(2019/08/22)
最近のMacPortsの更新でqhullライブラリが更新され、Basemapとの不整合が生じています。そのために、MacPortsで更新(port upgrade outdated)を行うと、Basemapのm.contour()やm.contorf()等でtri=Trueとした場合、以下のエラーが発生します。現時点ではエラー回避のための更新がMacPortsから提供されていないため、更新は推奨されません。2019年4月頃から発生しているbasemap問題も引き続き発生します。
QH6249 qh_lib_check: Incorrect qhull library called. Size of qhT for caller is 2792, but for qhull library is 2896. QH6256 qhull internal error (qh_lib_check): Cannot continue due to QH6249.. Library 'qhull 7.3.2 (2019.1 2019/06/21)' should use a static qhT (e.g., libqhull.so). It may be out-of-date. Exit with 49
- 既にMacPortsの更新を適用してしまった場合のプログラム変更例
- 変更前(lats、lonsが2次元の緯度、経度配列、dが2次元の気象データの場合)
m = Basemap(オプション) lats_1d= np.ravel(lats) lons_1d= np.ravel(lons) m.contour(lons_1d, lats_1d, d, tri=True, colors='blue', linestyles='-')
tri=Trueの場合には、緯度、経度データを1次元で与えるので、このようにしている - 変更後
m = Basemap(オプション) m.contour(lons, lats, d, tri=True, colors='blue', linestyles='-')
tri=Trueオプションを使わないように書き換える(この場合には、緯度、経度の配列を2次元で与える)
- 変更前(lats、lonsが2次元の緯度、経度配列、dが2次元の気象データの場合)
MacPorts更新後のBasemapエラー(2019/05/23)
2019年4月頃のpyprojの更新(バージョン2.1.3)の際、内部で使用されるprojのバージョンが5から6に更新され、同時にpyproj.pyproj_datadirが廃止されています。その影響で、MacPortsで更新(port upgrade outdated)を行うと、Basemapの読み込み時に以下のエラーが発生します。現時点ではエラー回避のコードがMacPortsから提供されていないため、更新は推奨されません。
Traceback (most recent call last): File "ファイル名", line 9, in <module> from mpl_toolkits.basemap import Basemap File "/opt/local/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/mpl_toolkits/basemap/__init__.py", line 152, in <module> epsgf = open(os.path.join(pyproj.pyproj_datadir,'epsg')) AttributeError: module 'pyproj' has no attribute 'pyproj_datadir'
- 問題点
- コードの問題点(Basemapのコード未更新に伴うもの): pyproj.pyproj_datadirでディレクトリのパスが取得できない(/opt/local/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/mpl_toolkits/basemap/__init__.pyの152行目)
- データの問題点(projのバージョン更新に伴うもの): pyproj.datadir.get_data_dir()で取得されるディレクトリは、/opt/local/lib/proj6/share/proj/になる。その場所にはepsgがないため、単にpyproj.pyproj_datadirの代わりにpyproj.datadir.get_data_dir() と書き換えても、ファイル読み込みでエラーが発生する。
epsgf = open(os.path.join(pyproj.pyproj_datadir,'epsg'))
ディレクトリのパスはpyproj.pyproj_datadirではなく、pyproj.datadir.get_data_dir()で取得するようになったため
現時点では、proj5の/opt/local/lib/proj5/share/proj/epsgを利用するしかない - 既にMacPortsの更新を適用してしまった場合の解決策
- Basemapコードを変更し、proj5のepsgを使う
% cd /opt/local/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/mpl_toolkits/basemap
% sudo vi __init__.py
# epsgf = open(os.path.join(pyproj.pyproj_datadir,'epsg')) # 152行目(元のコード) # エラー回避のため、proj5のepsgファイルを読み込み pyproj_datadir = "/opt/local/lib/proj5/share/proj/" epsgf = open(os.path.join(pyproj_datadir,'epsg'))
Basemapでimportエラー(2018/12/18)
MacPortを使い2018/10/18現在のmatplotlib最新版(3.0.0)に更新した場合、basemap-1.1.0でmatplotlib.cbook内のis_scalarをimportできない不具合が発生します。
この更新でmatplotlib.cbook内のis_scalarがis_scalar_or_stringに変更されました。一方で、basemap(ver. 1.1.0)の方ではimportする設定が変更されていない不一致があります。バグfixが出るまでは、以下のようにコードを修正することで対応可能です。
この更新でmatplotlib.cbook内のis_scalarがis_scalar_or_stringに変更されました。一方で、basemap(ver. 1.1.0)の方ではimportする設定が変更されていない不一致があります。バグfixが出るまでは、以下のようにコードを修正することで対応可能です。
ファイル:/opt/local/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/mpl_toolkits/basemap/__init__.py
17行目*basemap1.2.0で不具合が修正された(2019/11/08)
# from matplotlib.cbook import is_scalar, dedent
from matplotlib.cbook import is_scalar_or_string, dedent
4987行目
# elif masked and is_scalar(masked):
elif masked and is_scalar_or_string(masked):
[top]