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

springboot调用python文件,在ubuntu上部署,踩坑之旅(已部署成功)

项目介绍

springboot 调用python文件,python调用另一个数据文件,然后计算出结果,看似简单,实际上有很多坑,因为涉及到python的三方库,有时候下载不下来,有时候版本不匹配,折腾了好久

之前的做法

之前我会在windows上通过docker docker desktop打包好,然后通过xftp传到服务器,结果集成了python环境,包竟然有将近6个G,一旦出错,又得重新上传,岂不是很费时间。所以在ubuntu服务器上打包,这样节省了很长时间,问题就是在服务器上部署,环境又很重要

分享

我先把打包好的jar包传到服务器上,然后要把之前的dockerfile进行路径修改,之前都是在工程里打包的
在这里插入图片描述

先看一下需要用到的python库
requirements.txt

numpy==1.24.4
pandas==2.0.3
torch==2.1.0
matplotlib==3.7.2
scipy==1.11.2

这个刚开始我用到了,后来我也不用了,因为运行时经常报丢依赖,看后边的说明

1.依赖包下载不下来

官方的python依赖包经常下载不下来,需要用国内镜像,国内镜像有的也不靠谱,比较烦

2.依赖包冲突

这个也是个问题,依赖包经常冲突

3.文件目录不存在

有时候没有权限,有时候创建文件目录失败,烦不胜烦

解决

分享一下docker相关的文件,希望对大家有帮助
首先用到的命令行

//第一次打包时,进行的配置
需要提前安装的python环境
docker pull python:3.9
docker pull openjdk:11-jdk-slim
在linux上,如果上述不行,用下边这个
sudo docker pull docker-0.unsee.tech/library/python:3.9
sudo docker pull docker-0.unsee.tech/library/openjdk:11-jdk-slim//第一次打包时,报错进行的配置
# 备份原配置
sudo cp /etc/docker/daemon.json /etc/docker/daemon.json.baksudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
EOF
sudo systemctl restart dockersudo docker pull docker-0.unsee.tech/library/python:3.9pip install --upgrade pipsudo yum install epel-release          # 安装EPEL扩展源
sudo yum install python3-pip          # 安装Python 3的pipecho 'export PATH=$PATH:/usr/local/bin' >> ~/.bashrc  # 添加路径
source ~/.bashrc                                      # 立即生效sudo mkdir -p /etc/docker  # 确保目录存在
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://docker-0.unsee.tech","https://docker.1ms.run"]
}
EOF后续打包
sudo docker build -t ring:1.0.0 .
sudo docker save -o ring_1_0_0_new.tar ring:1.0.0

这些也不见的全对,因为是我第一次打包时进行的配置,后来也修改了很多,只做参考
dockerfile

# 阶段1:Python环境构建
FROM docker-0.unsee.tech/library/python:3.9-slim as python-builder# 修正阿里云源配置(兼容Debian 12+)
RUN sed -i 's|http://.*debian.org|https://mirrors.aliyun.com|g' /etc/apt/sources.list.d/debian.sources && \apt-get update -o Acquire::Retries=5 && \apt-get install -y --no-install-recommends \build-essential \python3-dev \libatlas3-base && \rm -rf /var/lib/apt/lists/*# 安装指定版本的Python依赖
COPY /python/requirements.txt /
RUN pip config set global.index-url https://mirrors.aliyun.com/pypi/simple && \pip install --no-cache-dir --upgrade pip==21.3.1 && \pip install --no-cache-dir \numpy==1.24.4 \pandas==2.0.3 \torch==2.1.0 \matplotlib==3.7.2 \scipy==1.11.2 && \mkdir -p /python/raw_data && \python -c "import numpy, pandas, torch, matplotlib, scipy; print(f'验证版本: numpy={numpy.__version__}, pandas={pandas.__version__}, torch={torch.__version__}, matplotlib={matplotlib.__version__}, scipy={scipy.__version__}')"# 阶段2:最终镜像
FROM docker-0.unsee.tech/library/openjdk:11-jdk-bullseye# 安装最小化Python环境
RUN apt-get update && \apt-get install -y --no-install-recommends \python3-minimal \libatlas3-base && \rm -rf /var/lib/apt/lists/* && \ln -sf /usr/bin/python3 /usr/bin/python && \mkdir -p /python/raw_data /home/ring/uploadPath /var/log/ring# 复制Python依赖
COPY --from=python-builder /usr/local/lib/python3.9/site-packages/ /usr/local/lib/python3.9/site-packages/
COPY --from=python-builder /python/raw_data /python/raw_data# 环境变量配置
ENV PYTHONPATH="/usr/local/lib/python3.9/site-packages:/python" \PYTHONUNBUFFERED=1 \LD_LIBRARY_PATH="/usr/local/lib/python3.9/site-packages/numpy/.libs:$LD_LIBRARY_PATH"# 部署应用
COPY /ring.jar /ring.jar
COPY /python /python
RUN chmod 755 /ring.jar && \python -c "import numpy; print(f'运行时验证: numpy={numpy.__version__}')" || \(pip install --no-cache-dir -r /python/requirements.txt && \python -c "import numpy; print(f'重装后验证: numpy={numpy.__version__}')")EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/ring.jar"]

这个里边有配置国内镜像,有配置环境变量,已经很简化了,python是我的目录,放置的是python文件,可以参考上一篇博客

DeepSeek使用注意点

这次成功,deepseek功不可没,但是也被坑了很长时间,最后总结了一下怎么使用deepseek
1.缺点:deepseek是参考了很多资料才给出的结果,所以上一次给出的答案,和下次给出的答案,有时候都不一样,甚至会把之前能用的代码给你改掉,我就遇到了一次,清华的镜像不可用,后边deepseek给换成了阿里的,然后后边又问了一些问题,又给我换回去了,然后越问越离刚开始的版本差别越大,最后还不如第一版
2.怎么用:如果有问题,要把所有的的配置都给它,然后它才好分析,然后如果有问题,需要修改的时候,尽量输入“保持之前的配置,只修改必要的部分”等,防止把之前能用的修改掉,然后如果它只是给出了关键部分,最好输入“给出修改过的全文”之类的,防止自己粘贴复制出错
3.deepseek是很不错,但是问题就是给人很大的自信,然后又发现它给的解决方法根本不能用,这个不要想着一次成功,需要有耐心一点,然后尽量多的给它资料,反正吧,比自己查资料来得快,但是也得学会自己分析,有时候可能路径问题,或者命名问题,这个不给它更多的资料,一般分析不出来

相关文章:

  • Redis的Key的过期策略
  • 【笔试强训day19】
  • Spring 事件机制与观察者模式的深度解析
  • 《 C++ 点滴漫谈: 三十三 》当函数成为参数:解密 C++ 回调函数的全部姿势
  • vue2实现在屏幕中有一个小机器人可以随意移动
  • 数字化引擎再升级:小匠物联十周年庆典与全链路创新实践
  • Ubuntu 22.04安装MySQL : Qwen2.5 模型对话数据收集与微调教程
  • 探索Linux/Unix 系统中进程与文件的深层关系
  • 在 Ubuntu 22.04.1 LTS上搭建FTP服务的详细指南
  • 【从零实现高并发内存池】内存池整体框架设计 及 thread cache实现
  • Leetcode 去除重复字母
  • LeetCode算法题(Go语言实现)_45
  • Spring Boot 使用 QQ 企业邮箱发送邮件的完整指南(含 535 错误排查)
  • Redis奇幻之旅(三)1.redis客户端与服务端
  • 【Python爬虫】简单案例介绍4
  • PE文件(十五)绑定导入表
  • 【论文阅读】MOE奠基论文《Adaptive Mixtures of Local Experts》
  • C++基础精讲-07
  • TCPIP详解 卷1协议 五 Internet协议
  • Java 企业级应用:SOA 与微服务的对比与选择
  • 越怕出错越会出错,“墨菲定律”的魔咒该怎么破?
  • 代理销售保险存在误导行为,农业银行重庆市分行相关负责人被罚款0.1万元
  • 马上评|孩子亲近自然只能靠公园露营了吗
  • 百济首次实现季度营业利润扭亏,泽布替尼销售额近57亿元
  • 美国与胡塞武装达成停火协议,美伊相向而行?
  • 宁合两大都市圈交汇之城含山:要想身体好,常往含山跑