在ubuntu下一键安装 Open WebUI

该脚本用于自动化安装 Open WebUI,并支持以下功能:

可选跳过 Ollama 安装:通过 --no-ollama 参数跳过 Ollama 的安装。自动清理旧目录:如果安装目录 (~/open-webui) 已存在,脚本会自动删除旧目录并重新安装。完整的依赖安装:包括 Python、Node.js、npm、Git 等依赖的安装。自动配置系统服务:将 Open WebUI 配置为系统服务,并设置开机自启。防火墙配置:自动开放端口 8080,以便访问 Open WebUI。

更新后的脚本:
bash
复制


#!/bin/bash# 遇到错误时退出脚本
set -e# 检查并设置 Conda
setup_conda() {# 如果 conda 命令不可用,但目录存在if [ -d "$HOME/miniconda" ]; thenecho "检测到已存在的 Miniconda 安装,正在配置..."# 添加到 PATHexport PATH="$HOME/miniconda/bin:$PATH"# 初始化 bash 和 condaif [ ! -f "$HOME/.bashrc" ] || ! grep -q "conda initialize" "$HOME/.bashrc"; then"$HOME/miniconda/bin/conda" init bashsource "$HOME/.bashrc"fielseecho "正在安装 Miniconda..."# 下载 Miniconda 安装脚本wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh# 安装 Minicondabash miniconda.sh -b -p "$HOME/miniconda"# 初始化 bash 和 condaexport PATH="$HOME/miniconda/bin:$PATH""$HOME/miniconda/bin/conda" init bashsource "$HOME/.bashrc"fi
}# 生成随机密钥的函数
generate_secret_key() {python3 -c 'import secrets; print(secrets.token_urlsafe(32))'
}# 显示脚本用法
usage() {echo "用法: $0 [--no-ollama] [--no-download]"echo "  --no-ollama: 跳过 Ollama 安装"echo "  --no-download: 跳过下载 Open WebUI 代码(如果已经下载)"exit 1
}# 解析参数
SKIP_OLLAMA=false
SKIP_DOWNLOAD=false
while [[ $# -gt 0 ]]; docase "$1" in--no-ollama)SKIP_OLLAMA=trueshift;;--no-download)SKIP_DOWNLOAD=trueshift;;*)usage;;esac
done# 检查 sudo 权限
check_sudo() {if ! sudo -n true 2>/dev/null; thenecho "需要 sudo 权限来安装系统依赖。"echo "请确保你有 sudo 权限,或者以 root 用户运行此脚本。"exit 1fi
}echo "开始安装 Open WebUI..."# 检查 sudo 权限
check_sudo# 更新系统包
echo "更新系统包..."
if command -v apt-get &> /dev/null; thensudo -n apt-get updatesudo -n apt-get upgrade -y
fi# 安装基本依赖
echo "安装基本依赖..."
sudo -n apt-get install -y python3 python3-pip git curl python3-venv build-essential || { echo "安装依赖失败"; exit 1; }# 安装 Node.js
echo "安装 Node.js..."
if ! command -v node &> /dev/null; thenecho "安装 Node.js 20 LTS..."# 添加 NodeSource 仓库if [ ! -f "/etc/apt/sources.list.d/nodesource.list" ]; thenecho "添加 NodeSource 仓库..."curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo -n gpg --dearmor -o /usr/share/keyrings/nodesource.gpgecho "deb [signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" | sudo -n tee /etc/apt/sources.list.d/nodesource.listsudo -n apt-get updatefi# 安装 Node.jssudo -n apt-get install -y nodejs# 验证安装if ! command -v node &> /dev/null; thenecho "Node.js 安装失败"exit 1fi
fi# 显示 Node.js 版本
echo "Node.js 版本:"
node --version
echo "npm 版本:"
npm --version# 安装 Ollama(如果不跳过)
if [[ "$SKIP_OLLAMA" = false ]]; thenecho "安装 Ollama..."curl -fsSL https://ollama.com/install.sh | sh || { echo "Ollama 安装失败"; exit 1; }sudo systemctl enable ollamasudo systemctl start ollama
elseecho "跳过 Ollama 安装。"
fi# 检查 CUDA 环境
check_cuda() {echo "检查 CUDA 环境..."if ! command -v nvidia-smi &> /dev/null; thenecho "警告: 未检测到 NVIDIA GPU 驱动"return 1elseecho "GPU 信息:"nvidia-smi --query-gpu=gpu_name,driver_version,memory.total,memory.free,memory.used,temperature.gpu --format=csv,noheaderreturn 0fi
}# 设置 CUDA 环境
setup_cuda() {# 检查 CUDA 是否已安装if [ -d "/usr/local/cuda-11.4" ]; thenecho "CUDA 11.4 已安装在 /usr/local/cuda-11.4"# 设置环境变量if ! grep -q "export PATH=/usr/local/cuda-11.4/bin" ~/.bashrc; thenecho 'export PATH=/usr/local/cuda-11.4/bin:$PATH' >> ~/.bashrcfiif ! grep -q "export LD_LIBRARY_PATH=/usr/local/cuda-11.4/lib64" ~/.bashrc; thenecho 'export LD_LIBRARY_PATH=/usr/local/cuda-11.4/lib64:$LD_LIBRARY_PATH' >> ~/.bashrcfisource ~/.bashrcreturn 0# 如果没有安装且没有 nvcc 命令elif ! command -v nvcc &> /dev/null; thenecho "未检测到 CUDA toolkit,正在安装..."# 检查安装文件是否已存在CUDA_INSTALLER="cuda_11.4.4_470.82.01_linux.run"if [ ! -f "$CUDA_INSTALLER" ]; thenecho "下载 CUDA 11.4 安装包..."wget https://developer.download.nvidia.com/compute/cuda/11.4.4/local_installers/$CUDA_INSTALLERelseecho "CUDA 安装包已存在,跳过下载..."fiecho "安装 CUDA toolkit..."sudo sh $CUDA_INSTALLER --toolkit --silent --override# 设置环境变量if ! grep -q "export PATH=/usr/local/cuda-11.4/bin" ~/.bashrc; thenecho 'export PATH=/usr/local/cuda-11.4/bin:$PATH' >> ~/.bashrcfiif ! grep -q "export LD_LIBRARY_PATH=/usr/local/cuda-11.4/lib64" ~/.bashrc; thenecho 'export LD_LIBRARY_PATH=/usr/local/cuda-11.4/lib64:$LD_LIBRARY_PATH' >> ~/.bashrcfisource ~/.bashrcreturn 0fireturn 1
}# 检查 GPU 和设置 CUDA
if check_cuda; thenecho "检测到 GPU,设置 CUDA 环境..."setup_cuda# 设置 GPU 相关环境变量export NODE_ONNX_RUNTIME_GPU=1export CUDA_VISIBLE_DEVICES=0# 显示 CUDA 版本echo "CUDA 版本: $(nvidia-smi | grep "CUDA Version" | awk '{print $9}')"# 下载 GPU 版本的 onnxruntimeecho "下载 onnxruntime GPU 版本..."mkdir -p node_modules/onnxruntime-node/bin/napi-v3/linux/x64cd node_modules/onnxruntime-node/bin/napi-v3/linux/x64# 尝试多个下载源download_file() {local urls=("https://mirror.ghproxy.com/https://github.com/microsoft/onnxruntime/releases/download/v1.20.1/onnxruntime-linux-x64-gpu-1.20.1.tgz""https://hub.fastgit.xyz/microsoft/onnxruntime/releases/download/v1.20.1/onnxruntime-linux-x64-gpu-1.20.1.tgz""https://github.com/microsoft/onnxruntime/releases/download/v1.20.1/onnxruntime-linux-x64-gpu-1.20.1.tgz")for url in "${urls[@]}"; doecho "尝试从 $url 下载..."wget --no-check-certificate \--timeout=15 \--tries=3 \--continue \--inet4-only \-q --show-progress \"$url" && return 0echo "从 $url 下载失败,尝试下一个源..."donereturn 1}if ! download_file; thenecho "GPU 版本下载失败,切换到 CPU 模式..."export NODE_ONNX_RUNTIME_GPU=0elseecho "解压 GPU 版本文件..."tar xzf onnxruntime-linux-x64-gpu-1.20.1.tgzficd -
elseecho "未检测到 GPU,将使用 CPU 模式..."export NODE_ONNX_RUNTIME_GPU=0# 下载 CPU 版本的 onnxruntimeecho "下载 onnxruntime CPU 版本..."mkdir -p node_modules/onnxruntime-node/bin/napi-v3/linux/x64cd node_modules/onnxruntime-node/bin/napi-v3/linux/x64wget --no-check-certificate \--timeout=15 \--tries=3 \--continue \--inet4-only \-q --show-progress \"https://github.com/microsoft/onnxruntime/releases/download/v1.20.1/onnxruntime-linux-x64-1.20.1.tgz"if [ $? -eq 0 ]; thenecho "解压 CPU 版本文件..."tar xzf onnxruntime-linux-x64-1.20.1.tgzelseecho "警告: onnxruntime CPU 版本下载失败"ficd -
fi# 临时设置环境变量
if [ -d "/usr/local/cuda-11.4" ]; thenexport PATH=/usr/local/cuda-11.4/bin:$PATHexport LD_LIBRARY_PATH=/usr/local/cuda-11.4/lib64:$LD_LIBRARY_PATH
fi# 检查是否已经在虚拟环境中
if [ -z "$VIRTUAL_ENV" ]; then# 如果不在虚拟环境中,则检查并设置 Condaif ! command -v conda &> /dev/null; thenecho "Conda 未安装或不在 PATH 中,正在设置..."setup_condafi# 再次检查 conda 是否可用if ! command -v conda &> /dev/null; thenecho "Conda 安装失败,请手动安装 Conda 后重试"exit 1fi# 确保 conda 命令可用source "$HOME/.bashrc"eval "$(conda shell.bash hook)"# 检查并删除已存在的环境if conda env list | grep -q "^open-webui "; thenecho "删除已存在的 open-webui 环境..."conda deactivateconda env remove -n open-webui -yfi# 创建并激活 Python 3.11 环境echo "创建 Python 3.11 环境..."conda create -y -n open-webui python=3.11source activate open-webui || conda activate open-webui
elseecho "检测到已存在的虚拟环境: $VIRTUAL_ENV"echo "跳过创建新环境..."
fi# 验证 Python 环境
echo "验证 Python 环境..."
which python
python --version# 创建安装目录
echo "设置 Open WebUI 安装目录..."
INSTALL_DIR="/opt/open-webui"
mkdir -p "$INSTALL_DIR"# 下载或更新 Open WebUI
if [[ "$SKIP_DOWNLOAD" = false ]]; thenecho "下载 Open WebUI..."if [ -d "$INSTALL_DIR/open-webui" ]; thenecho "更新 Open WebUI..."cd "$INSTALL_DIR/open-webui"git pullelseecho "克隆 Open WebUI..."cd "$INSTALL_DIR"git clone https://github.com/open-webui/open-webui.gitfi
elseecho "跳过下载 Open WebUI..."if [ ! -d "$INSTALL_DIR/open-webui" ]; thenecho "错误:Open WebUI 目录不存在于 $INSTALL_DIR/open-webui"echo "请确保目录存在或移除 --no-download 选项"exit 1fi
fi# 设置权限
echo "设置目录权限..."
sudo -n chown -R $USER:$USER "$INSTALL_DIR"# 进入项目目录
cd "$INSTALL_DIR/open-webui"# 安装系统依赖
echo "安装系统依赖..."
if command -v apt-get &> /dev/null; thensudo -n apt-get updatesudo -n apt-get install -y ffmpeg
elif command -v yum &> /dev/null; thensudo -n yum install -y ffmpeg
elif command -v pacman &> /dev/null; thensudo -n pacman -S --noconfirm ffmpeg
elif command -v apk &> /dev/null; thensudo -n apk add --no-cache ffmpeg
elseecho "警告: 无法识别的包管理器,请手动安装 ffmpeg"
fi# 构建前端
echo "构建前端..."
cd /opt/open-webui/open-webuiecho "清理旧的构建文件..."
rm -rf node_modules package-lock.jsonecho "配置 npm..."
npm config set registry https://registry.npmmirror.com
npm config set fetch-retries 5
npm config set fetch-timeout 60000
npm config set progress true
npm config set loglevel infoecho "安装前端依赖..."
# 使用 pnpm 或 npm 安装依赖
if command -v pnpm &> /dev/null; thenecho "使用 pnpm 安装依赖..."# 配置 pnpm 使用淘宝镜像pnpm config set registry https://registry.npmmirror.compnpm install --reporter=default
elseecho "使用 npm 安装依赖..."npm install --verbose
fi# 构建前端
echo "构建前端..."
if command -v pnpm &> /dev/null; thenpnpm run build --reporter=default
elsenpm run build --verbose
fi# 检查构建结果
if [ -d "build" ]; thenecho "前端构建成功!"
elseecho "前端构建失败,请检查错误信息"exit 1
fi# 初始化数据库
echo "初始化数据库..."
cd backend
export PYTHONPATH=/opt/open-webui/open-webui/backend# 运行数据库迁移
echo "运行数据库迁移..."
if [ -f "open_webui/alembic.ini" ]; thencd open_webuiecho "当前目录: $(pwd)"echo "运行迁移..."alembic upgrade headcd ..
elseecho "在以下位置搜索 alembic.ini:"find . -name "alembic.ini" -type fecho "错误: 找不到 alembic.ini"exit 1
fi# 确保 .webui_secret_key 存在
if [ ! -f ".webui_secret_key" ]; thenecho "生成 secret key..."head -c 12 /dev/random | base64 > .webui_secret_key
fi# 设置环境变量
export WEBUI_SECRET_KEY=$(cat .webui_secret_key)
export PORT=8111
export HOST=0.0.0.0# 启动服务
if command -v gunicorn &> /dev/null; thenecho "使用 gunicorn 启动..."gunicorn -w 1 -k uvicorn.workers.UvicornWorker "open_webui.main:app" \--bind 0.0.0.0:8111 \--timeout 300 \--log-level debug \--error-logfile - \--capture-output &# 保存进程 IDGUNICORN_PID=$!echo "Gunicorn PID: $GUNICORN_PID"
elseecho "使用 uvicorn 启动..."python -m uvicorn "open_webui.main:app" \--host 0.0.0.0 \--port 8111 \--log-level debug &# 保存进程 IDUVICORN_PID=$!echo "Uvicorn PID: $UVICORN_PID"
fi# 等待后端启动
echo "等待服务启动..."
for i in {1..30}; doif curl -s http://localhost:8111/health > /dev/null; thenecho "服务已启动成功!"echo "请访问 http://localhost:8111"breakfi# 检查进程是否还在运行if [ ! -z "$GUNICORN_PID" ] && ! ps -p $GUNICORN_PID > /dev/null; thenecho "错误: Gunicorn 进程已退出"breakfiif [ ! -z "$UVICORN_PID" ] && ! ps -p $UVICORN_PID > /dev/null; thenecho "错误: Uvicorn 进程已退出"breakfiecho "尝试 $i/30..."sleep 1
done# 如果服务没有启动,显示调试信息
if ! curl -s http://localhost:8111/health > /dev/null; thenecho "服务启动失败,显示调试信息:"echo "Python 路径: $PYTHONPATH"echo "当前目录: $(pwd)"echo "Python 版本: $(python --version)"echo "已安装的包:"pip listecho "目录内容:"ls -laecho "open_webui 目录内容:"ls -la open_webui/echo "进程状态:"ps aux | grep -E "gunicorn|uvicorn"echo "端口状态:"netstat -tuln | grep 8111echo "日志内容:"tail -n 50 /var/log/syslog | grep -E "gunicorn|uvicorn|open_webui"
fi# 创建系统服务
echo "创建系统服务..."
sudo tee /etc/systemd/system/open-webui-backend.service << EOL
[Unit]
Description=Open WebUI Backend
After=network.target[Service]
Type=simple
User=$USER
WorkingDirectory=/opt/open-webui/open-webui/backend
ExecStart=/opt/open-webui/open-webui/venv/bin/gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app --bind 0.0.0.0:8111
Environment="PATH=/opt/open-webui/open-webui/venv/bin"
Restart=on-failure
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=open-webui-backend[Install]
WantedBy=multi-user.target
EOL# 启动并启用服务
echo "启动 Open WebUI 服务..."
sudo systemctl daemon-reload
sudo systemctl enable open-webui-backend
sudo systemctl start open-webui-backend# 配置防火墙
echo "配置防火墙..."
sudo ufw allow 8111/tcpecho "安装成功完成!"
echo "您现在可以通过 http://localhost:8111 访问 Open WebUI。"
echo "首次访问时,请创建一个管理员账户。"

使用方法:

将脚本保存为文件,例如 install_open_webui.sh。赋予脚本执行权限:
bash
复制chmod +x install_open_webui.sh运行脚本:默认安装(包含 Ollama):bash复制./install_open_webui.sh跳过 Ollama 安装:bash复制./install_open_webui.sh --no-ollama

注意事项:

确保您具有 sudo 权限来运行脚本。如果安装失败,可以通过以下命令查看服务日志:
bash
复制sudo journalctl -u open-webui-backend如果前端构建失败,请确保已正确安装 nodejs 和 npm,然后手动运行以下命令:
bash
复制npm install
npm run build

如果有其他问题,欢迎随时提问!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/67375.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AJAX笔记入门篇

黑马程序员视频地址&#xff1a; 黑马程序员前端AJAX入门到实战全套教程https://www.bilibili.com/video/BV1MN411y7pw?vd_source0a2d366696f87e241adc64419bf12cab&spm_id_from333.788.videopod.episodes&p2https://www.bilibili.com/video/BV1MN411y7pw?vd_source…

工作总结:git篇

文章目录 前言基础Gerrit1.克隆2.新建本地分支和checkout3.添加到暂存区新增文件到暂存区修改已经添加到暂存区的文件取消添加到暂存区的文件 4.提交到本地仓库在不重复提交的情况下&#xff0c;修改本次提交 5.提交到远程仓库6.评审其他辅助命令 前言 目前也算是工作一段时间…

< OS 有关> BaiduPCS-Go 程序的 菜单脚本 Script: BaiduPCS-Go.Menu.sh (bdgo.sh)

目标&#xff1a; 使用 日本阿里云的 VPM 传输文件。 暂时方案&#xff1a; 使用 主机JPN 下载 https://huggingface.co/ 上模型从 JPN 放到 度狗上在家里从狗度下载 为了减少编程&#xff0c;尽量使用现在软件 &#xff0c;就找到 GitHub - qjfoidnh/BaiduPCS-Go: iikira…

(详细)Springboot 整合动态多数据源 这里有mysql(分为master 和 slave) 和oracle,根据不同路径适配不同数据源

文章目录 Springboot 整合多动态数据源 这里有mysql&#xff08;分为master 和 slave&#xff09; 和oracle1. 引入相关的依赖2. 创建相关配置文件3. 在相关目录下进行编码&#xff0c;不同路径会使用不同数据源 Springboot 整合多动态数据源 这里有mysql&#xff08;分为maste…

DeepSeek--通向通用人工智能的深度探索者

一、词源与全称 “DeepSeek"由"Deep”&#xff08;深度&#xff09;与"Seek"&#xff08;探索&#xff09;组合而成&#xff0c;中文译名为"深度求索"。其全称为"深度求索人工智能基础技术研究有限公司"&#xff0c;英文对应"De…

matlab中,fill命令用法

在 MATLAB 中&#xff0c;fill 命令用于创建填充多边形的图形对象。使用 fill 可以在二维坐标系中绘制填充的区域&#xff0c;通常用于绘制图形的背景或显示数据分布。 基本语法 fill(X, Y, C)X 和 Y 是同样长度的向量&#xff0c;定义了多边形的顶点坐标。C 是颜色&#xff0…

汽车定速巡航

配备定速巡航功能的车型&#xff0c;一般在方向盘附近设有4~6个按键&#xff08;可能共用键位&#xff09;。 要设置定速巡航&#xff0c;不仅需要方向盘上的按键&#xff0c;还要油门配合。 设置的一般流程&#xff1a; 开关&#xff1a;类似步枪上的“保险”&#xff0c;按…

C++11中array容器的常见用法

文章目录 一、概述二、std::array的特点三、std::array的定义与初始化三、std::array的常用成员函数四、与 C 风格数组的互操作 一、概述 在 C11 中&#xff0c;std::array 是一个新的容器类型&#xff0c;它提供了一个固定大小的数组封装。相比传统的 C 风格数组&#xff0c;…

Vue 响应式渲染 - 待办事项简单实现

Vue 渐进式JavaScript 框架 基于Vue2的学习笔记 - Vue 响应式渲染 - 待办事项简单实现 目录 待办事项简单实现 页面初始化 双向绑定的指令 增加留言列表设置 增加删除按钮 最后优化 总结 待办事项简单实现 页面初始化 对页面进行vue的引入、创建输入框和按钮及实例化V…

中文输入法方案

使用了三年的自然码双拼&#xff0c;毫无疑问是推荐使用双拼输入法。 三年积累下来的习惯是&#xff1a; 1 自然码方案 2 空格出字 字母选字 直到如今&#xff0c;想要做出改变&#xff0c;是因为这样的方案带来的痛点&#xff1a; 1 使用空格出字就无法使用辅助码&#…

在Windows系统中本地部署属于自己的大语言模型(Ollama + open-webui + deepseek-r1)

文章目录 1 在Windows系统中安装Ollama&#xff0c;并成功启动&#xff1b;2 非docker方式安装open-webui3下载并部署模型deepseek-r1 Ollama Ollama 是一个命令行工具&#xff0c;用于管理和运行机器学习模型。它简化了模型的下载与部署&#xff0c;支持跨平台使用&#xff0c…

ProGen生成功能蛋白序列

LLM在包括蛋白质设计等各种生物技术应用中展现出了潜力。ProGen是一种语言模型&#xff0c;它能够生成在大型蛋白质家族中具有可预测功能的蛋白质序列&#xff0c;这类似于针对不同主题生成语法和语义正确的自然语言句子。该模型在来自超过19,000个家族的2.8亿个蛋白质序列上进…

省级数字经济发展水平数据(2011-2022年)-社科数据

省级数字经济发展水平数据&#xff08;2011-2022年&#xff09;-社科数据https://download.csdn.net/download/paofuluolijiang/90028602 https://download.csdn.net/download/paofuluolijiang/90028602 数字经济是指以数据资源为关键要素、以现代信息网络为主要载体、以信息…

Leecode刷题C语言之跳跃游戏②

执行结果:通过 执行用时和内存消耗如下&#xff1a; int jump(int* nums, int numsSize) {int position numsSize - 1;int steps 0;while (position > 0) {for (int i 0; i < position; i) {if (i nums[i] > position) {position i;steps;break;}}}return steps…

《多线程基础之条件变量》

【条件变量导读】条件变量是多线程中比较灵活而且容易出错的线程同步手段&#xff0c;比如&#xff1a;虚假唤醒、为啥条件变量要和互斥锁结合使用&#xff1f;windows和linux双平台下&#xff0c;初始化、等待条件变量的api一样吗&#xff1f; 本文将分别为您介绍条件变量在w…

消息队列篇--通信协议篇--TCP和UDP(3次握手和4次挥手,与Socket和webSocket的概念区别等)

1、TCP和UDP概述 TCP&#xff08;传输控制协议&#xff0c;Transmission Control Protocol&#xff09;和UDP&#xff08;用户数据报协议&#xff0c;User Datagram Protocol&#xff09;都算是最底层的通信协议&#xff0c;它们位于OSI模型的传输层。*传输层的主要职责是确保…

打破传统束缚:领略 Web3 独特魅力

在互联网发展的历程中&#xff0c;我们见证了Web1和Web2的变迁。Web1是静态信息的展示平台&#xff0c;Web2则引领了社交互动和内容创作的繁荣&#xff0c;而如今&#xff0c;Web3作为新时代的互联网架构&#xff0c;正逐渐展现出其独特的魅力&#xff0c;带领我们走向一个更加…

[论文总结] 深度学习在农业领域应用论文笔记14

当下&#xff0c;深度学习在农业领域的研究热度持续攀升&#xff0c;相关论文发表量呈现出迅猛增长的态势。但繁荣背后&#xff0c;质量却不尽人意。相当一部分论文内容空洞无物&#xff0c;缺乏能够落地转化的实际价值&#xff0c;“凑数” 的痕迹十分明显。在农业信息化领域的…

Linux 学习笔记__Day3

十八、设置虚拟机的静态IP 1、VMware的三种网络模式 安装VMware Workstation Pro之后&#xff0c;会在Windows系统中虚拟出两个虚拟网卡&#xff0c;如下&#xff1a; VMware提供了三种网络模式&#xff0c;分别是&#xff1a;桥接模式&#xff08;Bridged&#xff09;、NAT…

QT+mysql+python 效果:

# This Python file uses the following encoding: utf-8 import sysfrom PySide6.QtWidgets import QApplication, QWidget,QMessageBox from PySide6.QtGui import QStandardItemModel, QStandardItem # 导入需要的类# Important: # 你需要通过以下指令把 form.ui转为ui…