Help us understand the problem. What is going on with this article?

Mac (macOS Catalina) の開発環境設定の記録 (データサイエンスのための環境構築)

はじめに

macOS Catalina をクリーンインストールした際の記録です。

データサイエンスのための環境構築の記録です。

Jupyter Notebook を使用できるようにするために,以下のような環境を構築します。

記事作成・更新時の環境

  • Model: MacBook Pro (13-inch, 2016, Four Thunderbolt 3 Ports)
  • OS: macOS Catalina 10.15.1
  • Anaconda 2019.10 (Python 3.7 version)
  • Docker Engine 19.03.5

ローカル環境編

1. Anaconda のインストール

公式サイト Anaconda からインストーラーをダウンロードしインストールします。

ルートに opt/anaconda3 というディレクトリが作成され,そこへインストールされます。

以下が ~/.bash_profile へ追記されます。

.bash_profile
# added by Anaconda3 2019.10 installer
# >>> conda init >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$(CONDA_REPORT_ERRORS=false '/Users/harumasa/opt/anaconda3/bin/conda' shell.bash hook 2> /dev/null)"
if [ $? -eq 0 ]; then
    \eval "$__conda_setup"
else
    if [ -f "/Users/harumasa/opt/anaconda3/etc/profile.d/conda.sh" ]; then
        . "/Users/harumasa/opt/anaconda3/etc/profile.d/conda.sh"
        CONDA_CHANGEPS1=false conda activate base
    else
        \export PATH="/Users/harumasa/opt/anaconda3/bin:$PATH"
    fi
fi
unset __conda_setup
# <<< conda init <<<

macOS Catalina からデフォルトのシェルが bash から zsh へ変更になりました。

~/.zprofile へ以下を追記します。

.zprofile
source ~/opt/anaconda3/etc/profile.d/conda.sh

2. Anaconda のアップデート

conda のアップデートは以下を実行します。

$ conda update conda

anaconda のアップデートは以下を実行します。

$ conda update anaconda

全パッケージのアップデートは以下を実行します。

$ conda update --all

特定のパッケージのアップデートは以下を実行します。

$ conda update python

3. Jupyter Notebook の設定変更

Jupyter Notebook のデフォルトフォントは等幅ではないため Ricty Diminished へ変更します。

フォントの設定は ~/.jupyter/custom/custom.css に記述します。

custom.css
.CodeMirror pre {
    font-family: Ricty Diminished;
}

4. RISE のインストール

検索すると出てくる記事の多くでは以下のようにしてインストールするとあります。

$ pip install RISE
$ jupyter-nbextension install rise --py --sys-prefix
$ jupyter-nbextension enable rise --py --sys-prefix

公式サイト RISE の Installation の一部分を抜粋します。

1 - Using conda

$ conda install -c conda-forge rise

conda の場合はチャンネルの指定が必要とのことです。

2 - Using pip

$ pip install RISE

さらに抜粋します。

Note:
Before RISE 5.4.2, it was necessary to perform one more step to install the JS and CSS in the proper places with
jupyter-nbextension install rise --py --sys-prefix
This is not needed anymore because those resources are installed automatically by the setup.py when you pip install the package.

最近の RISE は $ jupyter-nbextension install rise --py --sys-prefix をする必要がないとのことです。

公式サイトで最新の情報を確認するということが大切であるということを改めて実感しました。

備忘録と自分への戒めのような意味合いで記録しておきます。

Docker 編

1. Docker のインストール

$ brew cask install docker

メニューバーのクジラのアニメーションが動いている間は起動中です.

起動後に以下を確認します。

$ docker version

インストール後に Preferences > Advanced からメモリの上限値を変更します。

初期値が 2GB のようですので増やしておきます。

2. フォルダ構成について

以下のようなフォルダ構成を想定しています。

.
├── .dockerignore
├── .gitignore
├── data/      # Data Files
├── docker-compose.yml
├── Dockerfile
└── notebook/  # Jupyter Notebook

GitHub から Clone ないし Download することで,Docker 環境さえあればいつでも再現できることを目標にします。

各ファイルとフォルダについては以下になります。

2.1. .dockerignore について

.dockerignore
data
notebook

.dockerignore はビルドに必要がないようなファイルやフォルダを記述します。

data/ は分析対象のファイルの保存を想定していますが,大容量のデータが入っていて .dockerignore に記述をしなかった場合,Docker のビルドに時間がかかるようになってしまいます。

コンテナ内とのデータの共有については,後述するビルド時にマウントすることで対応します。

2.2. .gitignore について

Python 関連の .gitignore ファイルです。

2.3. Dockerfile について

Dockerfile
FROM gcr.io/kaggle-images/python:v69

RUN pip install -U pip && \
    pip install RISE

Google Container Registry 上にある Kaggle 公式 Docker イメージ を使用しています。

データ分析に必要なライブラリの多くが含まれています。

:v69 とタグを指定することでバージョンを固定しています。

:latest とすると最新版になりますが,イメージが更新されるたびにダウンロードが行われ環境が変わることになります。

pip を更新し,RISE をインストールしておきます。

2.4 docker-compose.yml について

docker-compose.yml
version: "3"
services:
  jupyter:
    build: .
    command: jupyter notebook --allow-root --ip=0.0.0.0 --no-browser
    ports:
      - 8888:8888
    volumes:
      - $PWD/notebook:/dev/work
    working_dir: /dev/work

version:docker-compose.yml の書き方のバージョンになります。

services: 以下にコンテナの設定を記述します。

jupyter: はコンテナを管理するための名前になります。

build: . は同一フォルダにある Dockerfile をビルドするという意味になります。

command: はコンテナ起動時に実行されるコマンドの内容になります。

ルートでの実行の許可,コンテナ外から Jupyter Notebook へのアクセスの許可,Jupyter Notebook 起動時にブラウザを立ち上げないオプションを指定しています。

ports: でこちらのポート番号とコンテナ内のポート番号を繋いでいます。

こちらの localhost:8888 とコンテナ内の localhost:8888 を対応させています。

volumes: で現在のフォルダ内の notebook/ フォルダと,コンテナ内の初期フォルダをマウントしています。

working_dir: でコンテナ内の初期フォルダを指定しています。

本来であれば Docker コンテナ上で Jupyter Notebook を起動しているため,Docker コンテナ内の localhost:8888 にアクセスしないと Jupyter Notebook を見ることができません。

上記の設定により,コンテナ外のこちらのブラウザの localhost:8888 からアクセスすることができるようになります。

Docker コンテナ内の初期フォルダに Jupyter Notebook を保存すれば,こちらの notebook/ フォルダに保存されることになります。

3. Jupyter Notebook の起動

下記を実行し Jupyter Notebook を起動します。

$ docker-compose up --build

初回のイメージのダウンロードサイズは 16GB 以上ありますので通信環境に気をつけたいです。

Dockerfile がビルドされ,その後 Docker コンテナ内で Jupyter Notebook が起動されます。

Jupyter Notebook の起動時には以下のようなログが表示されると思います。

+++

jupyter_1  |     to login with a token:
jupyter_1  |         http://[hogehoge]:8888/token=[xxxxxxxxxxxxxxxx]

上記の login with a token の下のURLをコピーします。

[hogehoge] の部分を localhost に変えてブラウザからのアクセスすると Jupyter Notebook が起動します。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away