当前位置: 首页 > news >正文

Flask(2): 在windows系统上部署项目2

  4 创建并激活虚拟环境

        虚拟环境非常有用,可以将多个项目隔离开来。根据我看的教程,貌似以前有多种创建方式,后来官方自带了。目前我就用官方的方式。

        4.1 创建虚拟环境       

        创建部署文件夹(假如目录为d:\project01),在命令提示符中定位到该目录中,执行如下命令:

python -m venv .venv

        这里最后的“.venv”是我设置的虚拟环境名称,可以根据自己的习惯改成其他的。命令运行后会在项目文件夹下创建和虚拟环境同名的文件夹。

        4.2 激活虚拟环境

        运行如下命令激活虚拟环境(以我的情况为例,其实就是运行.venv\scripts目录下的activate.bat批处理文件):

.venv\scripts\activate

        成功后将会发现前面多了一些字符:括号里包含了虚拟环境的名称。这时就可以执行python程序或使用pip管理包了。

        还可以运行"deactivate"命令退出虚拟环境。

5 安装依赖

        在虚拟环境里执行"pip list"命令可以查看该虚拟环境下已经安装的包。

        在源代码的虚拟环境里(我使用pycharm,会自动帮我激活虚拟环境,无需手动)执行"pip freeze > requirements.txt"命令来生成requirements.txt, 将该文件复制到要部署的目录下,执行"pip install -r requirements.txt"命令来批量安装依赖的模块。

        虽然比复制虚拟环境多了安装过程,但是比较可靠。特别要注意的是将镜像源换成国内的,否则安装很慢。比如使用阿里云的镜像源,只要在刚才pip install命令后面再加上"-i https://mirrors.aliyun.com/pypi/simple/"。

6 复制代码并改变设置

        将源代码复制过去,不要复制虚拟环境。

        后续的项目维护上,我使用文件同步软件来更新程序文件。这类软件可以自动识别有变动的文件,然后上传到服务器上。为了防止这种方法有什么隐患,目前我是在升级前备份下生产环境。

7 运行项目

        目前我对wsgi,web服务器,应用服务器,nginx等分别有什么用理解的还不够,只能依葫芦画瓢。

        我的程序入口是main.py:

from app import create_app
from server import serverapp = create_app()  # 目前使用bat文件设置使用哪个配置, 这里不要传入参数if __name__ == '__main__':server(app)

        为了使用tornado,又加了一个server.py:

from tornado.httpserver import HTTPServer
from tornado.wsgi import WSGIContainer
from tornado.ioloop import IOLoopdef server(app, port=9900):s = HTTPServer(WSGIContainer(app))s.listen(port)  # 监听端口IOLoop.current().start()

        为了简便的运行程序,我在项目文件夹下创建批处理文件start.bat,命令如下:

call .venv\scripts\activate
set FLASK_CONFIG=production
python -m main

        其中第一行是激活虚拟环境,第二行是设置常量FLASK_CONFIG为生产环境,第三行是运行入口程序。运行后跳出命令提示符窗口,显示系统启动时的日志:

8 后记

        以上的要么是网上搜的教程,要么是问的ai,再经过自己的整理、实践,是能用的。但以我这点可怜的经验,肯定还有很大的改进空间,错漏也难免存在,希望能有大佬给出指点,不甚感激; 也希望有和我一样的菜鸟一起探讨,共同学习、进步。

相关文章:

  • 【C】初阶数据结构10 -- 希尔排序
  • 知识库Qanyting部署问题总结
  • 使用sealos部署kubernetes集群并实现集群管理
  • Idea连接远程云服务器上的MySQL,开放云服务器端口
  • Markdown 教程
  • Linux驱动开发-①regmap②IIO子系统
  • Spring Boot 项目中发布流式接口支持实时数据向客户端推送
  • 【KWDB创作者计划】_KwDB2.2.0深度实践:从存储引擎到物联网场景的多模数据库实战
  • XSS之同源、跨域、内容安全策略
  • C语言——数组
  • 【网络技术_域名解析DNS】一、DNS 基础剖析及其原理
  • [轻量化超分]CAMixerSR: Only Details Need More “Attention“
  • HTML5好看的水果蔬菜在线商城网站源码系列模板5
  • 有什么工具可以在家连接到公司内网?局域网址提供异地公网访问的那些常用方法
  • CentOS系统-超详细的Kubernetes集群搭建教程(kubernetes:1.28.2)
  • Rust生命周期、文件与IO
  • 20.3 使用技巧3
  • Qwen2.5-VL视觉大语言模型复现过程,没碰到什么坑
  • 【AI量化第24篇】KhQuant 策略框架深度解析:让策略开发回归本质——基于miniQMT的量化交易回测系统开发实记
  • Go语言入门到入土——三、处理并返回异常
  • 印度证实印巴已同意停火
  • 气象干旱黄色预警继续:陕西西南部、河南西南部等地特旱
  • 人民日报钟声:平等对话是解决大国间问题的正确之道
  • 上汽享道出行完成13亿元C轮融资,已启动港股IPO计划
  • 本周看啥|喜欢二次元的观众,去电影院吧
  • 保证断电、碰撞等事故中车门系统能够开启!汽车车门把手将迎来强制性国家标准