LoginSignup
1
2

More than 3 years have passed since last update.

Docker コンテナを構築して altair から png 保存する

Posted at

私は長い試行錯誤を要したので成果だけでもアップしておく。chromedriver-binary の最新版を入れたら google-chrome-stable よりメジャーバージョンが大きくてエラーが出た。Chrome 側で stable 以外を使ってもよさそうだが、Chrome に chromedriver-binary を合わせることにした。

Dockerfile
FROM python

# Chrome のインストール
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add && \
    echo 'deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main' | tee /etc/apt/sources.list.d/google-chrome.list && \
    apt update && apt install -y google-chrome-stable

WORKDIR /python
COPY requirements.txt .
# chromedriver-binary のメジャーバージョンを Chrome に合わせる
#     google-chrome --version: "Google Chrome 0.0.0.0" のような文字列を返す
#     grep --only-matching:    (各行で) マッチした部分のみを順にすべて返す
#     head -n 1:               メジャーバージョンだけとってくる
#     sed --in-place:          私は知らなかった
RUN sed -e s/chromedriver-binary/chromedriver-binary==`google-chrome --version | grep -o -E "[0-9]*" | head -n 1`.*/ -i requirements.txt

RUN pip install --upgrade pip && pip install -r requirements.txt
requirements.txt
altair
altair_saver
chromedriver-binary
jupyter
matplotlib
numpy
pandas
scipy==1.5
selenium

タイトルに関係あるのは altair, altair_saver, chromedriver-binary, selenium のはず。

main.py
import altair
import chromedriver_binary              # import によって PATH が通る; モジュールとしては使わない
altair.renderers.enable('altair_saver') # 公式ドキュメントにはフォーマットを指定する引数があったが、怒られたので外した
altair.Chart(...).....save('plot.png')  # 成功した
1
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
1
2