PyStanのインストール方法(Windows)

はじめに

  • Prophetを使いたいが、PyStanが必要。
  • 2022/3/30時点でPyStan 3以上はWindows非対応、LinuxMacOSに対応。
  • ProphetはPyStan2.19.1.1までに対応。
  • C++コンパイラが必要(VC++ 14以上またはgcc9.0以上)
  • WindowsではAnaconda環境でしか上手くインストールできない。(頑張ればインストールできるかもしれないが私は無理でした)
  • pipと混ぜると危険らしいので、原則condaでインストールをすすめる。

環境

  • Windows 10 Pro (21H2)
  • Anaconda
    • conda 4.12.0
    • anaconda 2021.11
    • python 3.9.7 ※ProphetはPython3.9以上非対応

インストール


1. チャンネルの確認

さまざまなパッケージ(ライブラリ)を取得する先?でいいのかな。 conda-forgeというチャンネルがなんか良さげということらしい。

まず、Anaconda Promptを管理者権限で起動する。

(こういう環境構築系は管理者権限でやれと偉い人が言っていた気がする。)

確認コマンド:

conda config --get channels

実行結果:

--add channels 'defaults'   # lowest priority

defaultが設定されている。 そこで、conda-forgeを追加する。

チャンネル追加コマンド:

conda config --append channels conda-forge

再度確認すると、

--add channels 'conda-forge'   # lowest priority
--add channels 'defaults'   # highest priority

conda-forgeの追加に成功した。


2. 仮想環境の作成。

conda create -n 仮想環境の名前 python=x.x

参考記事と同様にstanという名前にする。 また、pythonのバージョンは、PyStanやProphetのがpython3.7以上に対応している。 python --versionコマンドで確認するとPython 3.9.7らしいので、仮想環境もこれに合わせてみた。

(追記:ProphetはPython3.9以上非対応)

conda create -n stan python=3.7

途中でProceed ([y]/n)?ときかれるのでyで進める。 以降の手順でもよく聞かれるので同様に進める。

また、Python 3.7系の最新版へのアップデートが含まれるので、今回の例ではPython 3.7.13がインストールされた。

仮想環境が出来上がると、次のコマンド実行し、仮想環境に入る。

conda activate stan

すると、コンソールの表記が

(base)C:\User\username>

(base)~だったのが

(stan)C:\User\username>

(仮想環境名)~に変わる。


3. パッケージのインストール

ここからパッケージをインストールしていく。 PyStanにはCythonとNumpyが必要なので、先にこの2つをインストールする。

conda install Cython Numpy 

PyStanはProphetが2.19.1.1までしか対応していないのでバージョンを指定してインストールする。

conda install pystan==2.19.1.1

さらに

conda install matplotlib jupyter

までインストールしたところで、他に必要なものがあればインストールしておく。 scipyやpandasはいつのまにかインストールされていた。

次に、C++コンパイラをインストールする。

conda install libpython m2w64-toolchain -c msys2

その後、Pythonのパス配下のコンフィグファイルを編集する。

今回の場合、C:\Users\ユーザ名\anaconda3\Lib\distutils

distutils.cfgを編集する。(なければ新規作成する。)

そして中身には

[build]
compiler=mingw32

を記述する。


4. jupyter notebookでの仮想環境の切り替え設定

仮想環境に入ったままなら一旦出る。

conda deactivate 

そして以下のコマンドを実行する。

pip install environment_kernels
jupyter notebook --generate-config

C:\Users\ユーザ名\.jupyter\jupyter_notebook_config.pyというファイルが作られている。 これをテキストエディタで開き、次の記述を追加する。

www.servernote.net

追記内容:

  • c.NotebookApp.kernel_spec_manager_class='environment_kernels.EnvironmentKernelSpecManager'

  • c.EnvironmentKernelSpecManager.conda_env_dirs=['C:\Users\ユーザ名\Anaconda3\envs']

このconda_env_dirsのパスを確認するには以下のコマンドで確認する。

conda info -e

結果は

# conda environments:
#
base                     C:\Users\ユーザ名\anaconda3
stan                  *  C:\Users\ユーザ名\anaconda3\envs\stan

というように作成したstanのパスを確認する。 これを踏まえ、追記すると以下のようになる。

#------------------------------------------------------------------------------
# KernelSpecManager(LoggingConfigurable) configuration
#------------------------------------------------------------------------------

## If there is no Python kernelspec registered and the IPython kernel is
#  available, ensure it is added to the spec list.
#c.KernelSpecManager.ensure_native_kernel = True
c.NotebookApp.kernel_spec_manager_class='environment_kernels.EnvironmentKernelSpecManager'
c.EnvironmentKernelSpecManager.conda_env_dirs=['C:\Users\ユーザ名\Anaconda3\envs']

以上でインストールは終了。

動作確認

Jupyter Notbookを起動しを切り替えればいいらしいが、 よくわからないのでAnaconda Navigatorから切り替えて起動すればOk。

f:id:indonegiyaland:20220331155609p:plain
Anaconda Navigator
画面上部のApplications on の項目に先程作成した「stan」が選べるはずなので、選択する。 そしてJupyter Notbookを起動する。 適当なサンプルプログラムを実行して確認する。

qiita.com

from pystan import StanModel

model = StanModel(model_code="parameters {real y;} model {y ~ normal(0,1);}")
print(model.sampling().extract()["y"].mean())

C++コンパイルに多少時間かかるらしいので、暫く待つと結果が返ってくる。 f:id:indonegiyaland:20220331160559p:plain

おわり

  • PyStanまでの道のりが長いので一旦ここまでで区切ります。
  • Prophetは別記事でまとめようと思います。

  • ちなみに、MacはAnaconda使わなくても割とすんなりProphetまでインストールできました。これもいずれまとめようと思います。