ローカルに開発環境を作るためにひさしぶりに開発コンテナーを使おうとしたらちょっとハマりました。
やりたいこと
- Pythonの開発環境を作りたい
- Pythonのデータ解析ライブラリを使えるようにしたい:Pandas、Poloars、NumPy、PyArrow
実行環境
- Windows 11 Pro 22H2 22621.1702
- Rancher Desktop 1.8.1
- WSL2 (Ubuntu)
- VisualStudio Code 1.78.2
- Dev Containers v0.292.0
- Dockerベースイメージ:python:3.11.3-bullseye (後述)
遭遇したトラブルと解決方法
NumPyとPyArrowのインストールに失敗する
最新のPython(2023/5/14時点では3.12.0a7)を選ぶと失敗、Alpine Linuxを選ぶと失敗。
最新のPythonを選んだとき:
#0 1524.0 CMake Error at CMakeLists.txt:261 (find_package):
#0 1524.0 By not providing "FindArrow.cmake" in CMAKE_MODULE_PATH this project has
#0 1524.0 asked CMake to find a package configuration file provided by "Arrow", but
#0 1524.0 CMake did not find one.
Alpine Linuxを選んだとき:
#0 26.92 [Errno 2] No such file or directory: 'gcc'
#0 26.92
#0 26.92 RuntimeError: Broken toolchain: cannot link a simple C program.
#0 26.92 [end of output]
#0 26.92
#0 26.92 note: This error originates from a subprocess, and is likely not a problem with pip.
#0 26.92 ERROR: Failed building wheel for numpy
#0 26.92 Failed to build numpy
#0 26.92 ERROR: Could not build wheels for numpy, which is required to install pyproject.toml-based projects
#0 26.92 [end of output]
解決方法は色々ありそうな気がしますが、今回はDockerベースイメージにpython:3.11.3-bullseyeを選ぶことで回避しました。
apt-get updateに失敗する
cmakeが必要なのかも?と試行錯誤する過程でapt-get updateしようとしたときに、以下のようなエラーが発生しました。
E: Release file for http://deb.debian.org/debian-security/dists/bullseye-security/InRelease is not valid yet
apt-getのオプションに-o Acquire::Check-Valid-Until=false -o Acquire::Check-Date=false
を加えて解決。
RUN apt-get -o Acquire::Check-Valid-Until=false -o Acquire::Check-Date=false update \
&& apt-get install -y cmake \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
そもそもの原因はWSLの時刻がズレているせいだったみたい。
確認してみたらめちゃめちゃズレてる!
user@mypc:~$ date
Sun May 14 07:23:46 JST 2023
user@mypc:~$ sudo hwclock -s
[sudo] password for user:
user@mypc:~$ date
Sun May 14 12:09:05 JST 2023
開発コンテナーに接続しようとすると失敗する
開発コンテナーのイメージがビルドできたところで、以下のようなエラーが発生しました。
docker: Error response from daemon: invalid mount config for type "bind": bind source path does not exist: \\wsl.localhost\Ubuntu\mnt\wslg\runtime-dir\wayland-0.
以下のページのトラブルシューティングを参考にVisualStudio Codeの設定を変更することで解決。
VSCode Dev ContainerとRancher Desktopで作るコンテナ環境【WSL】
なるほど、WSLにWAYLAND_DISPLAYが設定されてますね…
user@mypc:~$ echo $WAYLAND_DISPLAY
wayland-0
なので、dev.containers.mountWaylandSocket
をfalseにします。
導入したライブラリ
無事に以下のライブラリを導入できました。
ライブラリ | バージョン |
---|---|
numpy | 1.24.3 |
pandas | 2.0.1 |
pyarrow | 12.0.0 |
polars | 0.17.13 |
感想
ふりかえってみると簡単な話だった…精進が足りない。