はじめに
PyMC2系を利用するための環境は特に苦労なく構築できるのですが、PyMC3系の環境はすんなりいかなかったので備忘録的に残しておきます。
環境
項目名 | バージョン |
---|---|
Linux ディストリビューション | Ubuntu 20.04.3 LTS |
Python | 3.9.7 |
PyMC3 | 3.11.4 |
Python は pyenv で管理されていることを前提とします。
構築手順
必要なパッケージのインストール
sudo apt-get install gcc g++ gfortran make git libssl-dev libbz2-dev zlib1g-dev libreadline-dev libsqlite3-dev libffi-dev
Python のインストール
theano からの要請で、共有ライブラリ libpythonX.Y.a (X.Y は Python のバージョン) が位置独立コードでなければならないため、コンパイルオプション -fPIC を指定してビルドします。
CFLAGS="-fPIC" pyenv install 3.9.7
pip を最新版にアップグレードしておきます。
pip install --upgrade pip
PyMC3 のインストール
pip install pymc3
NumPy のダウングレード
NumPy 1.22 以降をインストールすると pymc3 インポート時に以下のようなエラーが出るため、ダウングレードをしておきます。
AttributeError: module 'numpy.distutils.__config__' has no attribute 'blas_opt_info'
pip install 'numpy<1.22'
補足
Python のバージョンが古いと最新の PyMC3 がインストールされません。たとえば Python-3.6 系の場合、PyMC3 3.10.0 がインストールされます。この場合 import pymc3 as pm
を実行すると以下のエラーが出ます。
~/.anyenv/envs/pyenv/versions/3.6.15/lib/python3.6/site-packages/pymc3/stats/__init__.py in <module>
45 compare = map_args(az.compare)
46 ess = map_args(az.ess)
---> 47 geweke = map_args(az.geweke)
48 hpd = map_args(az.hpd)
49 loo = map_args(az.loo)
AttributeError: module 'arviz' has no attribute 'geweke'
Python のバージョンを変えたくないのであれば、arviz をダウングレードすることによって上記問題を解決することができます。
pip install 'arviz<=0.11.0'