JAVA 开发Web项目,有一个预测算法的小功能,我们用Python写了一个简单的脚本(下次有时间可以把算法写写),本地是Windows开发的程序,线上是离线环境(没有网络),需要把Python放到Linux上运行,重点是Python部署时需要很多依赖类库,都是联网下载的,怎么把Python打包运行在Linux环境呢? Python 项目结构为 forcast |-- sarima.py (Python 程序脚本) |-- config.json (数据库配置) |-- requirements.txt (依赖包及版本信息)
有两个思路:(1)用docker容器化部署安装 (2)是否可像Java一样通过Maven将依赖都打到项目中;
第一个呢,还得在离线环境上安装docker。。。想想有点麻烦;我其实按第二个办法,第一个大致步骤如下所示,供参考:
(1)准备好环境:Python 3.X环境、Docker
(2)编写Dockerfile文件:用来定义镜像构建过程(用于定义如何将Python项目打包成Docker镜像,参考见下文)
(3)构建安Docker 镜像:docker build -t forcast ;
(4)运行容器: docker run -d -p 8080:8080 forcast-container (将容器中的8080端口映射到宿主机8080端口,这样可以在浏览器访问 http://ip:8080)
(5)自动化部署脚本编写(参考见下文)Dockerfile示例如下所示:
#使用官方Python基础镜像
FROM python:3.9-slim
#设置工作目录
WORKDIR /data/webapp/pythonapp
#将项目依赖COPY到工作目录中去
COPY requirements.txt ./
#安装依赖并清理缓存
RUN pip install --no-cache-dir -r requirements.txt
#如有脚本,可将Python脚本复制到容器中
#COPY deploy.sh ./
#如有脚本,赋予执行权限
#RUN chmod +x deploy.sh
#如有应用端口可暴露应用端口
EXPOSE 8080
#运行Python应用
CMD ["python","app.py"]自动化部署脚本可以自动化打包和部署流程,如下deploy.sh供参考且记着确保脚本有执行权限 chmod +x deploy.sh:
#!/bin/gash
#构建Docker镜像
docker build -t forcast .
#停止现有的容器
docker stop forcast-container || true
docker rm forcast-container ||true
#启动新的容器
docker