はじめに
会社でDockerの課題を作成して、環境構築の勉強をしていただいていました。
私も一応回答として課題で求めていた環境を事前に作成していました。
しかし、数日後に質問を受けて同じ環境を同じ手順で作成したところ、エラーがでるようになっていました。
まだ記事が(世界中でも?)存在しないため、解決方法を載せます。
環境
私が使っている環境は以下となります。
FROM python:3.7-alpine
USER root
WORKDIR /app
RUN apk update
RUN apk --no-cache add\
alpine-sdk\
libffi-dev\
zeromq-dev\
openssl-dev
RUN pip install --upgrade pip
ENV CRYPTOGRAPHY_DONT_BUILD_RUST=1
RUN pip install\
cryptography==3.4.1\
poetry==1.1.78
version: '3'
services:
python3:
restart: always
build: .
container_name: 'jupyter'
working_dir: '/app'
tty: true
volumes:
- ./app/:/app/
ports:
- "8888:8888"
[tool.poetry]
name = "app"
version = "0.1.0"
description = ""
authors = ["Your Name <you@example.com>"]
[tool.poetry.dependencies]
python = "^3.7"
[tool.poetry.dev-dependencies]
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
問題
Poetry add numpy
をすると以下のエラーが発生します。
$ poetry add numpy
Because no versions of numpy match >1.21.2,<2.0.0
and numpy (1.21.2) requires Python >=3.7,<3.11, numpy is forbidden.
So, because app depends on numpy (^1.21.2), version solving failed.
at /usr/local/lib/python3.7/site-packages/poetry/puzzle/solver.py:241 in _solve
237│ packages = result.packages
238│ except OverrideNeeded as e:
239│ return self.solve_in_compatibility_mode(e.overrides, use_latest=use_latest)
240│ except SolveFailure as e:
→ 241│ raise SolverProblemError(e)
242│
243│ results = dict(
244│ depth_first_search(
245│ PackageNode(self._package, packages), aggregate_package_nodes
• Check your dependencies Python requirement: The Python requirement can be specified via the `python` or `markers` properties
For numpy, a possible solution would be to set the `python` property to ">=3.7,<3.11"
数日前までは同じ方法でインストールできていたのでいきなりできなくなりました。
解決方法
これはpoetry add numpy
で最新のnumpyのバージョン1.21.2
をインストールしていることが原因でした。
pyproject.toml
にあるpython = "^3.7"
では対応していないようです。
以前インストールできたのは、1.21.1
でした。なんとこの記事を書いた前日に新たなバージョンがリリースしておりました・
解決方法は以下の二つです。
1. Numpy1.21.2(最新版を入れる)
pyproject.toml
を以下のように変更します。
python = "^3.7"
↓
python = ">=3.7,<3.11"
すると最新版のnumpyがインストールできるようになります。
2. python="^3.7"でインストールする方法
python="^3.7"もしくはpython="3.7"の固定バージョンでインストールする場合はnumpyのバージョンを指定します。
$ poetry add numpy=1.21.1
おわりに
Dockerは常にどの環境でも動くのでとても良いですが、環境のバージョンはしっかり固定しないとこのような問題が発生してしまいます。いつどのライブラリがバージョンアップしているかわからないので、気を付けていきたいです。