LoginSignup
18
2

More than 3 years have passed since last update.

JupyterLab + Poetry + Docker環境で、Elixirを実行する(Elixirライブラリも使える)

Last updated at Posted at 2020-12-21

この記事は、「fukuoka.ex Elixir/Phoenix Advent Calendar 2020」22日目の記事です。
きのうは@GKBRさんの「Hello! After World!! Serverless - (第0章)」でした!

概要

JupyterLabで、Python 以外の開発言語も実行できるようにする。

  • 実行環境の構築はDockerで行い、Pythonバージョン及びライブラリ管理はPoetryで行います。
  • Poetryでは仮想環境の構築はスキップします。(Dockerコンテナの構築やってるので)
  • 本記事では、Elixirの対話型実行環境「IEx」をJupyterLabで実行します。
    • JupyterカーネルのIElixirを使います。

後述もしますが、JupyterLabではコマンドの実行結果をそのままファイル形式で保存できます。
そのため、例えばElixirならIEx実行コマンドのコード管理にも役立てられる、ということがJupyterLabを実行するメリットのひとつです。

実行環境

  • MacOS
  • Docker (docker-compose)

環境構築 & コード

  • 任意のプロジェクト名でディレクトリを作ります
  • ディレクトリ直下に、以下の3ファイルを用意します

Dockerfile

Dockerfile
FROM python:3.8.6-slim

COPY pyproject.toml ./

ENV PYTHONUNBUFFERED=1 \
  ERLANG_PACKAGER_VERSION=2.0

RUN apt-get update -y && \
  apt-get upgrade -y && \
  apt-get install -y \
  build-essential \
  curl \
  git \
  inotify-tools \
  libsqlite3-dev \
  libzmq3-dev \
  sudo \
  vim \
  wget

# Install: pip & poetry
RUN pip install --upgrade pip
RUN pip install poetry
RUN poetry config virtualenvs.create false && \
  poetry install

# Install: Erlang
RUN wget https://packages.erlang-solutions.com/erlang-solutions_${ERLANG_PACKAGER_VERSION}_all.deb
RUN dpkg -i erlang-solutions_${ERLANG_PACKAGER_VERSION}_all.deb
RUN apt-get update && apt-get install -y esl-erlang
RUN rm erlang-solutions_${ERLANG_PACKAGER_VERSION}_all.deb
RUN which erl

# Install: Elixir
RUN apt-get update && apt-get install elixir
RUN which elixir
RUN mix --version && which mix

RUN mix local.hex --force
RUN mix local.rebar --force

RUN apt-get clean

# Install: IElixir
RUN git clone https://github.com/pprzetacznik/IElixir.git
WORKDIR IElixir
RUN mix deps.get
RUN mix test
RUN MIX_ENV=prod mix compile
RUN ./install_script.sh

CMD ["iex"]

docker-compose.yml

docker-compose.yml
version: "3"
services:
  eda:
    build: ./
    user: root
    volumes:
      - ./:/app
    working_dir: /app
    tty: true
    ports:
      - "8890:8890"
    command:
      jupyter lab
        --port=8890
        --ip=0.0.0.0
        --allow-root
        --NotebookApp.token=''
        --no-browser
  • ポート番号8890の部分はお好みでどうぞ
    • 本記事では8890で進めていますが、JupyterLabのデフォルトは8888ポート

pyproject.toml

pyproject.toml
[tool.poetry]
name = "jupyterlab_docker"
version = "0.2.0"
description = "Environment JupyterLab Poetry docker-compose"

authors = ["im"]

[tool.poetry.dependencies]
python = "^3.8"

jupyterlab = "*"
numpy = "*"
matplotlib = "*"
japanize-matplotlib = "*"

[tool.poetry.dev-dependencies]
pytest = "*"

[build-system]
requires = ["poetry_core>=1.0.10"]
build-backend = "poetry.masonry.api"
  • Pythonのライブラリ追加や削除は、[tool.poetry.dependencies]内の設定でお好みでどうぞ(本記事では説明対象のスコープ外とします)

実行

terminal
$ cd hogehoge(ファイルを用意したディレクトリ)

$ docker-compose build

$ docker-compose up

コンテナが起動したら、ブラウザでhttp://localhost:8890を確認します。

jupyter_ex1.png

Elixirカーネルを追加することができました。

jupyter_ex2.png

Elixirのコマンド実行もできています。

JupyterLabでの実行結果をファイルで保存できるので便利ですね!(.ipynb

(追記)ElixirのライブラリをJupyterLabで使う

Boyle.install({:math, "~> 0.5.0"})のようにコードを書くことで、ライブラリの使用が可能となります。

math_ex.png

おわりに

JupyterLab + Poetry + Docker環境でElixirを実行する環境を構築して、実際にElixirのコマンドを実行しました。

なお、本記事ではElixir言語を取り上げていますが、他言語でのJupyterLab実行環境構築もおなじようなノリでできるので、本記事でもし参考になる部分などがあれば参考にされて、試してみられるとよいと思います!

また、今回構築したJupyterLab + Poetry + Docker環境は、ふつうにPython用として使うことももちろん可能ですので、そちらのコンテキストでもよろしかったらどうぞ。

明日の「fukuoka.ex Elixir/Phoenix Advent Calendar 2020」は、@emadurandalさんです。お楽しみに!

お知らせ

kokura.ex

北九州小倉のElixirコミュニティ「kokura.ex」は、福岡市で2017年から人気を博しているElixirコミュニティ「fukuoka.ex」が小倉にブランチした、新生Elixirコミュニティです。

fukuoka.ex同様、

  • 「高速処理性能」と「高い開発効率性」を両立できるプログラミング言語「Elixir」
  • そのWebアプリケーションフレームワーク「Phoenix」

を、北九州を起点として広め、ワイワイ盛り上げていくコミュニティです。
これから先端技術をやりたい方や、最新のプログラミングを学びたい方、未来に向けてITに強くなりたい方など、技術への興味レベルが高い方や、プログラミングに関心が高い方のご参加を歓迎します。
オンラインでのもくもく勉強会を、毎月ペースで開催しておりますのでぜひどうぞ。
(はじめてElixirに触れる方も、お気軽にご参加ください!)

  • イベントページ fukuoka.ex
    • connpassイベント一覧より、kokura.exのページをご覧いただけます

Elixirアドベントカレンダー

Elixir Advent Calendar 2020」もありますので、こちらもぜひどうぞ。

18
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
2