📝

Docker による Python環境に z3py をインストール

2021/10/28に公開

はじめに

下記記事で、z3py (SMTソルバz3のPythonバインディング) を利用する方法を記載しました。
ただし、Dockerを用いたPython環境では、pip install z3-solver が失敗します。本記事では、その対処方法について記載します。

https://zenn.dev/ochamikan/articles/42ef29b944ed57

失敗原因

下記エラーメッセージの通り、cmake がインストールされていないことが原因です。
インストール時にz3本体もソースコードからビルドするため、必要なのだと思われます。

error: [Errno 2] No such file or directory: 'cmake'

対処方法

コンテナをrootユーザで起動

cmakeのインストールには、sudoコマンドを利用します。
そのため、下記コマンド(-u rootオプションを追加)を用いて、rootユーザでコンテナを起動します。

docker run -it --rm  -u root --name jupyter jupyter/scipy-notebook

gccをインストール

下記コマンドで、パッケージの一覧を最新の状態にした後に、build-essential パッケージをインストールします。この中にgccが含まれています。

sudo apt-get update
sudo apt-get install build-essential

cmakeをインストール

下記コマンドでインストールします。

sudo apt-get install cmake

z3pyをインストール

ここまで準備ができたら、下記コマンドが成功するはずです。インストールには数分程度かかる場合があります。[1]

pip install z3-solver

まとめ

Dockerを用いたPython環境では、pip install z3-solver が失敗するケースについて、対処方法を記載しました。

脚注
  1. もし、g++: internal compiler error: Killed (program cc1plus)のようなエラーが出る場合は、コンテナに割り当てるメモリのSwap領域が不足している可能性があります。私の環境では、Memory=3.0GB、Swap=2.0GBで動作しました。 ↩︎

Discussion