亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

無法在 docker 容器中安裝依賴項

無法在 docker 容器中安裝依賴項

繁星點點滴滴 2022-04-23 21:37:10
我正在使用poetry庫來管理項目依賴項,所以當我使用docker build --tag=helloworld .我收到了這個錯誤[AttributeError]               'NoneType' object has no attribute 'group'  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"和poetry.lock https://pastebin.com/kUjAKJHMDockerfile:FROM python:3.7.1-alpineRUN mkdir -p /opt/project/todo_apiRUN pip --no-cache-dir install poetryCOPY ./pyproject.toml /opt/projectCOPY poetry.lock /opt/projectRUN cd /opt/project && poetry install --no-devCOPY ./todo_api /opt/project/todo_apiCOPY ./todo_api.yml /opt/project/todo_api.ymlWORKDIR /opt/projectENTRYPOINT poetry run python -m aiohttp.web todo_api.main:main
查看完整描述

2 回答

?
藍山帝景

TA貢獻1843條經驗 獲得超7個贊

替代方法

不要安裝poetry到您的部署環境中。它是一個包管理工具,旨在改進庫的開發和協作。如果你想部署一個應用程序,你只需要一個包安裝程序(閱讀:pip)——關于構建過程和虛擬環境的固執己見poetry是有害的,而不是有益的。


在這種情況下,您要復制到 docker 映像中的工件是1)您最近構建的庫和2)已測試依賴項的操舵室,如poetry.lock.


第一個很容易,運行poetry build -f wheel,你有一個很好的便攜輪。第二個還不容易,因為poetry不支持建造操舵室(也許永遠不會),并且pip wheel不接受poetry.lock的文件格式。因此,如果您想走這條路,您需要使用支持的 beta 版本poetry(v1.0.0b7相當穩定)poetry export -f requirements.txt > requirements.txt,它可以讓您創建一個requirements.txt與當前鎖定文件等效的文件。


一旦你得到它,你可以運行pip wheel -w dist -r requirements.txt,最后,你完成了為 docker 鏡像創建所有的工件?,F在,以下將起作用:


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

優點

  • 在您的服務器中沒有不必要的依賴poetry(可能是相關的,因為它仍然是<v1.0

  • 您跳過服務器中的 virtualenv 并將所有內容直接安裝到系統中(您可能仍然選擇自己創建一個 virtualenv 并將您的應用程序安裝到其中,因為將您的應用程序安裝到系統 python 的側包中可能會導致問題

  • 您的安裝步驟不會針對 pypi 運行,因此可以保證此部署在您測試時可以正常工作(這是許多業務設置中非常重要的一點)

缺點

  • 每次都是手工做有點痛苦,這里的目標執行者應該是CI/CD而不是人

  • 如果您的工作站架構和 docker 映像不同,您構建和復制的輪子可能不兼容


查看完整回答
反對 回復 2022-04-23
?
白衣非少年

TA貢獻1155條經驗 獲得超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

使用 pyproject.toml:


[tool.poetry]

name = "57331667"

version = "0.0.1"

authors = ["skufler <[email protected]>"]


[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 .

結果:


...

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


查看完整回答
反對 回復 2022-04-23
  • 2 回答
  • 0 關注
  • 354 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號