为了账号安全,请及时绑定邮箱和手机立即绑定

python/flask 应用程序 dockerization 期间出现问题

python/flask 应用程序 dockerization 期间出现问题

largeQ 2023-09-19 17:38:09
这是当前的场景、docker 文件、要求和错误。有什么线索吗?这是一个带有 Flask 的大型 Python Web 应用程序,我们希望对其进行 dockerize。该问题发生在 pandas-profiling lib 依赖项安装期间,特别是 kiwisolver。见下文。Dockerfile:FROM python:3.8-alpineRUN adduser -D ddc-userWORKDIR /ddcCOPY . /ddcRUN python -m venv venvRUN venv/bin/pip install --upgrade pipRUN echo "http://dl-8.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories \     && apk --no-cache --update-cache add postgresql-dev g++ linux-headers gfortran libffi-dev openssl-dev gcc build-base bash libpng-dev openblas-dev wget freetype-dev python3-dev py3-pip \     && ln -s /usr/include/locale.h /usr/include/xlocale.h \     && pip install setuptools wheel \     && pip install numpy pyyamlRUN apk add --no-cache --virtual .build-deps gcc musl-devRUN pip install cythonRUN apk del .build-deps gcc musl-devRUN venv/bin/pip install -r requirements.txtRUN chmod +x boot.shENV FLASK_APP main.pyRUN chown -R ddc-user:users ./USER ddc-userEXPOSE 5000ENTRYPOINT ["./boot.sh"]要求.txt:alembic==0.9.9blinker==1.4chardet==3.0.4click==6.7Flask==1.0.2Flask-Dance==0.14.0Flask-DebugToolbar==0.10.1Flask-Login==0.4.1Flask-Migrate==2.1.1Flask-OAuth==0.12Flask-OAuthlib==0.9.4Flask-SQLAlchemy==2.3.2Flask-WTF==0.14.2httplib2==0.11.3idna==2.6itsdangerous==0.24Jinja2>=2.11.1lazy==1.3Mako==1.0.7MarkupSafe==1.1.1oauth2==1.9.0.post1oauthlib==2.0.7python-dateutil>=2.7.3python-editor==1.0.3requests==2.23.0requests-oauthlib==0.8.0SQLAlchemy==1.3.13SQLAlchemy-Utils==0.33.2urllib3==1.22URLObject==2.4.3Werkzeug==0.14.1wincertstore==0.2WTForms==2.1Blueprint==3.4.2google-cloud>=0.34.0google-cloud-storage>=1.24.1google-cloud-bigquery>=1.23.1Flask-Bootstrap==3.3.7.1six==1.13.0flask-mail>=0.9.1Markdown==2.6.8itsdangerous==0.24bleach==2.0.0Flask-SSLify==0.1.5gunicorn==19.7.1gcsfs==0.3.0cffi==1.13.2pandas>=0.25.3psycopg2==2.7.3cloudstorage==0.10.0vdm==0.15xlrd>=1.0.0schedule==0.6.0Flask-HTTPAuth>=4.1.0boto3==1.14.58fsspec==0.8.2pandas-profiling==2.9.0
查看完整描述

2 回答

?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

您正在混合调用“系统” pip/python和虚拟环境中的副本。


# In the "system" Python

RUN pip install setuptools wheel

# In the virtual environment

RUN venv/bin/pip install -r requirements.txt

由于 Docker 映像已经位于与任何特定主机系统的 Python 安装分开的隔离环境中,因此通常将内容安装到映像内的“系统”Python 中,而不使用虚拟环境。删除创建虚拟环境的行,并使用 justpip或pythonovervenv/bin/...替代方案。


# Remove this line

# RUN python -m venv venv

# Use "pip", not "venv/bin/pip"

RUN pip install --upgrade pip

RUN pip install setuptools wheel

RUN pip install -r requirements.txt


查看完整回答
反对 回复 2023-09-19
?
qq_笑_17

TA贡献1818条经验 获得超7个赞

您的环境无权访问wheel. 您应该能够通过添加以下行来解决此问题:

RUN pip install wheel

在尝试安装需求文件之前,将其添加到您的 dockerfile 中。

编辑:我错过了这里使用的虚拟环境。我认为在这种情况下使用虚拟环境是不必要的,除非OP 使用他们的 docker 实例并行运行多个 python 应用程序。有一些使用此模式的案例,尽管这里似乎不是这种情况。因此,我的建议是完全取消venv并简单地在 docker 实例 python 安装中安装所有依赖项,这会将每个venv/bin/pip调用转换为简单的pip调用。


查看完整回答
反对 回复 2023-09-19
  • 2 回答
  • 0 关注
  • 97 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信