2 回答

TA貢獻(xiàn)1843條經(jīng)驗(yàn) 獲得超7個(gè)贊
替代方法
不要安裝poetry到您的部署環(huán)境中。它是一個(gè)包管理工具,旨在改進(jìn)庫的開發(fā)和協(xié)作。如果你想部署一個(gè)應(yīng)用程序,你只需要一個(gè)包安裝程序(閱讀:pip)——關(guān)于構(gòu)建過程和虛擬環(huán)境的固執(zhí)己見poetry是有害的,而不是有益的。
在這種情況下,您要復(fù)制到 docker 映像中的工件是1)您最近構(gòu)建的庫和2)已測試依賴項(xiàng)的操舵室,如poetry.lock.
第一個(gè)很容易,運(yùn)行poetry build -f wheel,你有一個(gè)很好的便攜輪。第二個(gè)還不容易,因?yàn)閜oetry不支持建造操舵室(也許永遠(yuǎn)不會(huì)),并且pip wheel不接受poetry.lock的文件格式。因此,如果您想走這條路,您需要使用支持的 beta 版本poetry(v1.0.0b7相當(dāng)穩(wěn)定)poetry export -f requirements.txt > requirements.txt,它可以讓您創(chuàng)建一個(gè)requirements.txt與當(dāng)前鎖定文件等效的文件。
一旦你得到它,你可以運(yùn)行pip wheel -w dist -r requirements.txt,最后,你完成了為 docker 鏡像創(chuàng)建所有的工件?,F(xiàn)在,以下將起作用:
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
優(yōu)點(diǎn)
在您的服務(wù)器中沒有不必要的依賴
poetry
(可能是相關(guān)的,因?yàn)樗匀皇?code><v1.0)您跳過服務(wù)器中的 virtualenv 并將所有內(nèi)容直接安裝到系統(tǒng)中(您可能仍然選擇自己創(chuàng)建一個(gè) virtualenv 并將您的應(yīng)用程序安裝到其中,因?yàn)?a >將您的應(yīng)用程序安裝到系統(tǒng) python 的側(cè)包中可能會(huì)導(dǎo)致問題)
您的安裝步驟不會(huì)針對(duì) pypi 運(yùn)行,因此可以保證此部署在您測試時(shí)可以正常工作(這是許多業(yè)務(wù)設(shè)置中非常重要的一點(diǎn))
缺點(diǎn)
每次都是手工做有點(diǎn)痛苦,這里的目標(biāo)執(zhí)行者應(yīng)該是CI/CD而不是人
如果您的工作站架構(gòu)和 docker 映像不同,您構(gòu)建和復(fù)制的輪子可能不兼容

TA貢獻(xiàn)1155條經(jīng)驗(yàn) 獲得超0個(gè)贊
以下對(duì)我有用:
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
使用 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"
然后:
docker build --tag=57331667 --file=./Dockerfile .
結(jié)果:
...
Creating virtualenv 57331667-py3.7 in /root/.cache/pypoetry/virtualenvs
Updating dependencies
Resolving dependencies...
Writing lock file
Package operations: 15 installs, 0 updates, 0 removals
- Installing idna (2.8)
- Installing multidict (4.5.2)
- Installing six (1.12.0)
- Installing async-timeout (3.0.1)
- Installing attrs (18.2.0)
- Installing chardet (3.0.4)
- Installing marshmallow (2.19.5)
- Installing pymongo (3.8.0)
- Installing python-dateutil (2.8.0)
- Installing yarl (1.3.0)
- Installing aiohttp (3.5.4)
- Installing asyncio (3.4.3)
- Installing motor (2.0.0)
- Installing pyyaml (3.13)
- Installing umongo (2.1.0)
Removing intermediate container c6a9c7652b5c
---> 89354562cf16
Successfully built 89354562cf16
Successfully tagged 57331667:latest
添加回答
舉報(bào)