Sku*_*ler 4 python docker python-poetry
我正在使用poetry库来管理项目依赖项,所以当我使用
docker build --tag=helloworld .
我收到这个错误
[AttributeError]
'NoneType' object has no attribute 'group'
Run Code Online (Sandbox Code Playgroud)
在umongo (2.1.0)包上安装中断
这是我的pyproject.toml文件
[tool.poetry.dependencies]
python = "^3.7.0"
asyncio = "^3.4"
aiohttp = "^3.4"
motor = "^2.0"
umongo = "^2.0"
pyyaml = "^3.13"
[tool.poetry.dev-dependencies]
pytest = "^3.4"
black = {version = "^18.3-alpha.0",allows-prereleases = true}
mypy = "^0.650.0"
wemake-python-styleguide = "^0.5.1"
pytest-mock = "^1.10"
pytest-asyncio = "^0.9.0"
pytest-aiohttp = "^0.3.0"
Run Code Online (Sandbox Code Playgroud)
和poetry.lock
https://pastebin.com/kUjAKJHM
Dockerfile:
FROM python:3.7.1-alpine
RUN mkdir -p /opt/project/todo_api
RUN pip --no-cache-dir install poetry
COPY ./pyproject.toml /opt/project
COPY poetry.lock /opt/project
RUN cd /opt/project && poetry install --no-dev
COPY ./todo_api /opt/project/todo_api
COPY ./todo_api.yml /opt/project/todo_api.yml
WORKDIR /opt/project
ENTRYPOINT poetry run python -m aiohttp.web todo_api.main:main
Run Code Online (Sandbox Code Playgroud)
不要安装poetry到您的部署环境中。它是一个包管理工具,旨在改进库的开发和协作。如果你想部署一个应用程序,你只需要一个包安装程序(阅读pip:) -poetry关于构建过程和虚拟环境的固执己见的立场是有害的,而不是有帮助的。
在这种情况下,您要复制到 docker 映像中的工件是1)您正在使用的库的最新版本和2)由poetry.lock.
第一个很容易,运行poetry build -f wheel并且你有一个非常便携的轮子。第二个还不容易,因为poetry不支持建造操舵室(也许永远不会),并且pip wheel不接受poetry.lock的文件格式。因此,如果您想沿着这条路走下去,您需要在支持的poetry(v1.0.0b7相当稳定)的 beta 版本上工作poetry export -f requirements.txt > requirements.txt,这使您可以创建requirements.txt与当前锁定文件等效的文件。
完成后,您可以运行pip wheel -w dist -r requirements.txt,最后,您已完成为 docker 映像创建所有工件。现在,以下将起作用:
FROM python:3.7.1-alpine
WORKDIR /opt/project
COPY dist dist
RUN pip install --no-index --find-links dist todo_api
ENTRYPOINT python -m aiohttp.web todo_api.main:main
Run Code Online (Sandbox Code Playgroud)
poetry您的服务器没有不必要的依赖(可能是相关的,因为它仍然是<v1.0)以下对我有用:
FROM python:3.7.1-alpine
WORKDIR /opt/project
RUN pip install --upgrade pip && pip --no-cache-dir install poetry
COPY ./pyproject.toml .
RUN poetry install --no-dev
Run Code Online (Sandbox Code Playgroud)
使用 pyproject.toml:
[tool.poetry]
name = "57331667"
version = "0.0.1"
authors = ["skufler <skufler@email.com>"]
[tool.poetry.dependencies]
python = "^3.7.0"
asyncio = "^3.4"
aiohttp = "^3.4"
motor = "^2.0"
umongo = "^2.0"
pyyaml = "^3.13"
[tool.poetry.dev-dependencies]
pytest = "^3.4"
black = {version = "^18.3-alpha.0",allows-prereleases = true}
mypy = "^0.650.0"
wemake-python-styleguide = "^0.5.1"
pytest-mock = "^1.10"
pytest-asyncio = "^0.9.0"
pytest-aiohttp = "^0.3.0"
Run Code Online (Sandbox Code Playgroud)
然后:
FROM python:3.7.1-alpine
WORKDIR /opt/project
RUN pip install --upgrade pip && pip --no-cache-dir install poetry
COPY ./pyproject.toml .
RUN poetry install --no-dev
Run Code Online (Sandbox Code Playgroud)
结果:
[tool.poetry]
name = "57331667"
version = "0.0.1"
authors = ["skufler <skufler@email.com>"]
[tool.poetry.dependencies]
python = "^3.7.0"
asyncio = "^3.4"
aiohttp = "^3.4"
motor = "^2.0"
umongo = "^2.0"
pyyaml = "^3.13"
[tool.poetry.dev-dependencies]
pytest = "^3.4"
black = {version = "^18.3-alpha.0",allows-prereleases = true}
mypy = "^0.650.0"
wemake-python-styleguide = "^0.5.1"
pytest-mock = "^1.10"
pytest-asyncio = "^0.9.0"
pytest-aiohttp = "^0.3.0"
Run Code Online (Sandbox Code Playgroud)