conda 环境中部署gunicorn+flask项目

2024-02-08 11:32

本文主要是介绍conda 环境中部署gunicorn+flask项目,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

系统环境中安装的是Python3.5,项目中需要的Python为3.6及以上的环境,所以用conda虚拟环境进行隔离。

conda

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

项目搭建

进入虚拟环境,安装所需要的包。

sh Miniconda3-py37_4.11.0-Linux-x86_64.sh
source ~/.bashrc
conda config --set auto_activate_base false
#创建虚拟环境
conda create -n pytorch python=3.6
#进入虚拟环境
conda activate pytorch
#从清华源下载安装pytorch
conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda install -n pytorch pytorch torchvision cudatoolkit=10.0 
#工程需要的库用conda安装会失败,所以用的pip进行安装
#安装insightface,可以用pip安装或者python3.6 -m pip install 来安装
pip install insightface
#安装pymatting
pip install pymatting
#安装onnxruntime,onnxruntime和cuda需要版本对应,cuda10.0对应onnxruntime1.0或1.1
pip install onnxruntime-gpu==1.0 
#项目搭建依赖的库用conda就可以
#安装gunicorn
conda install gunicorn
#安装flask
conda install flask
conda install gevent
#gunicorn启动项目
gunicorn -c config.py flask_matting:app

问题

onnxruntime和cuda版本不匹配问题

  • 问题
    onnxruntime与cuda版本不匹配,可能出现的问题。
    在这里插入图片描述

  • 解决方法
    查看cuda版本

    nvcc -V
    

    在这里插入图片描述
    查看conda虚拟环境下pip的安装路径可以用pip -V来查看。
    在这里插入图片描述

gunicorn在conda虚拟环境下不能通过配置文件启动

该问题需要在gunicorn的配置文件config.py中加入如下代码,只有这样才能在log/error.log中显示问题的内容。不能用字典的形式写输出日志,使用字典的形式输出日志不显示问题的内容。

import os
import gevent.monkey
gevent.monkey.patch_all()import multiprocessing#debug = Truebind = '0.0.0.0:8000'
pidfile = 'log/gunicorn.pid'
accesslog = 'log/access.log'
errorlog = 'log/error.log'
  • 问题
    在这里插入图片描述
  • 解决方法
    通过测试不是gunicorn版本的问题。主要是因为配置文件中work_class = gevent的问题。将work_class = gevent修改为worker_class = 'gunicorn.workers.ggevent.GeventWorker就可以启动,但是不使用conda虚拟环境下的服务器上work_class = gevent可以直接启动,不需要修改。
import os
import gevent.monkey
gevent.monkey.patch_all()import multiprocessing#debug = Truebind = '0.0.0.0:7788'
pidfile = 'log/gunicorn.pid'
# accesslog = 'log/access.log'
# errorlog = 'log/error.log'logconfig_dict = {'version':1,'disable_existing_loggers': False,'loggers':{"gunicorn.error": {"level": "WARNING",# 打日志的等级可以换的,下面的同理"handlers": ["error_file"], # 对应下面的键"propagate": 1,"qualname": "gunicorn.error"},"gunicorn.access": {"level": "DEBUG","handlers": ["access_file"],"propagate": 0,"qualname": "gunicorn.access"}},'handlers':{"error_file": {"class": "logging.handlers.RotatingFileHandler","maxBytes": 1024*1024*1024,# 打日志的大小,我这种写法是1个G"backupCount": 1,# 备份多少份,经过测试,最少也要写1,不然控制不住大小"formatter": "generic",# 对应下面的键# 'mode': 'w+',"filename": "./log/gunicorn.error.log"# 打日志的路径},"access_file": {"class": "logging.handlers.RotatingFileHandler","maxBytes": 1024*1024*1024,"backupCount": 1,"formatter": "generic","filename": "./log/gunicorn.access.log",}},'formatters':{"generic": {"format": "'[%(process)d] [%(asctime)s] %(levelname)s [%(filename)s:%(lineno)s] %(message)s'", # 打日志的格式"datefmt": "[%Y-%m-%d %H:%M:%S %z]",# 时间显示方法"class": "logging.Formatter"},"access": {"format": "'[%(process)d] [%(asctime)s] %(levelname)s [%(filename)s:%(lineno)s] %(message)s'","class": "logging.Formatter"}}
}capture_output = True
#loglevel = 'warning'
loglevel = 'debug'daemon = True #后台启动
reload = True#workers = multiprocessing.cpu_count()
workers = 1
#worker_class = 'gevent'
worker_class = 'gunicorn.workers.ggevent.GeventWorker'
x_forwarded_for_header = 'X-FORWARDED-FOR'

安装的pytorch是CPU版本

conda环境中python为3.7时,用conda命令安装的pytorch可能时cpu版本,需要用conda list确认安装的是否是GPU版本。

conda install pytorch==1.4.0 torchvision cudatoolkit=10.0

Pillow、Numpy版本造成的错误

  • Pillow

    ImportError: cannot import name 'PILLOW_VERSION' from 'PIL'
    

    安装pillow==8.4.0版本

  • numpy
    安装numpy==1.20.0版本

    ValueError: numpy.ndarray size changed, may indicate binary incompatibility. Expected 88 from C header, got 80 from PyObject
    

参考资料
conda—学习笔记
在Anaconda虚拟环境中pip安装的包无法使用
CUDA Execution Provider
gunicorn flask启动没有多个worker_Gunicorn常用配置
ValueError: numpy.ndarray size changed, may indicate binary incompatibility. Expected 88 from C header, got 80 from PyObject
import torchvision报错ImportError: cannot import name ‘PILLOW_VERSION’ from ‘PIL’
解决torch.cuda.is_available()一直返回False的玄学方法之一

这篇关于conda 环境中部署gunicorn+flask项目的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/690887

相关文章

Conda与Python venv虚拟环境的区别与使用方法详解

《Conda与Pythonvenv虚拟环境的区别与使用方法详解》随着Python社区的成长,虚拟环境的概念和技术也在不断发展,:本文主要介绍Conda与Pythonvenv虚拟环境的区别与使用... 目录前言一、Conda 与 python venv 的核心区别1. Conda 的特点2. Python v

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

SQLite3 在嵌入式C环境中存储音频/视频文件的最优方案

《SQLite3在嵌入式C环境中存储音频/视频文件的最优方案》本文探讨了SQLite3在嵌入式C环境中存储音视频文件的优化方案,推荐采用文件路径存储结合元数据管理,兼顾效率与资源限制,小文件可使用B... 目录SQLite3 在嵌入式C环境中存储音频/视频文件的专业方案一、存储策略选择1. 直接存储 vs

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅

springboot项目打jar制作成镜像并指定配置文件位置方式

《springboot项目打jar制作成镜像并指定配置文件位置方式》:本文主要介绍springboot项目打jar制作成镜像并指定配置文件位置方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录一、上传jar到服务器二、编写dockerfile三、新建对应配置文件所存放的数据卷目录四、将配置文

怎么用idea创建一个SpringBoot项目

《怎么用idea创建一个SpringBoot项目》本文介绍了在IDEA中创建SpringBoot项目的步骤,包括环境准备(JDK1.8+、Maven3.2.5+)、使用SpringInitializr... 目录如何在idea中创建一个SpringBoot项目环境准备1.1打开IDEA,点击New新建一个项

Conda虚拟环境的复制和迁移的四种方法实现

《Conda虚拟环境的复制和迁移的四种方法实现》本文主要介绍了Conda虚拟环境的复制和迁移的四种方法实现,包括requirements.txt,environment.yml,conda-pack,... 目录在本机复制Conda虚拟环境相同操作系统之间复制环境方法一:requirements.txt方法

springboot项目中整合高德地图的实践

《springboot项目中整合高德地图的实践》:本文主要介绍springboot项目中整合高德地图的实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一:高德开放平台的使用二:创建数据库(我是用的是mysql)三:Springboot所需的依赖(根据你的需求再

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

python常见环境管理工具超全解析

《python常见环境管理工具超全解析》在Python开发中,管理多个项目及其依赖项通常是一个挑战,下面:本文主要介绍python常见环境管理工具的相关资料,文中通过代码介绍的非常详细,需要的朋友... 目录1. conda2. pip3. uvuv 工具自动创建和管理环境的特点4. setup.py5.