私は長い試行錯誤を要したので成果だけでもアップしておく。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') # 成功した