关键在于使用宝塔安装的Python 3.10绝对路径创建虚拟环境(如/www/server/pyporject_evn/versions/3.10.13/bin/python3.10 -m venv /www/wwwroot/myproject/venv),禁用自动创建,手动指定venv路径,并用该解释器执行pip安装和模块验证,避免ModuleNotFoundError。

宝塔面板里用 Python 3.10 搭建虚拟环境,关键不是“能不能装”,而是“路径必须绝对、解释器必须对齐、依赖必须装进对的地方”——否则 ModuleNotFoundError 会反复出现,且宝塔的“更新依赖文件”按钮根本不起作用。
确认并使用宝塔安装的 Python 3.10 可执行文件路径
宝塔自带的 Python 版本(如 3.10)不会注册到系统 PATH,python3 命令大概率仍指向系统自带的旧版本(比如 CentOS 的 3.6)。直接运行 python3 -m venv venv 创建的环境,底层解释器仍是错的。
- 进宝塔【软件商店】→ 找到已安装的 Python 3.10 → 点【设置】→ 复制“Python 主程序路径”,典型值为:
/www/server/pyporject_evn/versions/3.10.13/bin/python3.10(注意拼写是pyporject_evn,非pyproject_evn,这是宝塔实际路径) - SSH 登录后,用这个完整路径创建环境:
/www/server/pyporject_evn/versions/3.10.13/bin/python3.10 -m venv /www/wwwroot/myproject/venv - 别省略
/www/wwwroot/myproject/venv这个绝对路径——宝塔后台任务不继承终端当前目录,相对路径会建到未知位置
在 Python 项目管理器中绑定虚拟环境并禁用自动创建
宝塔的“自动创建虚拟环境”功能会忽略你已手动创建好的 venv,反而用它自己选的 Python 解释器重做一遍,导致冲突。必须关闭它,改用你亲手创建的那个。
- 进【网站】→ 选对应站点 → 【Python项目管理器】
-
Python 版本下拉框选你刚用的那个 3.10(不是“系统默认”) -
虚拟环境路径填你上一步创建的绝对路径:/www/wwwroot/myproject/venv - 取消勾选【自动创建虚拟环境】——这是最容易被忽略的致命开关
- 提交后,宝塔会检测该路径下是否存在
bin/python,存在即认为环境就绪
手动验证 pip 安装位置,绕过“更新依赖文件”的静默失败
点击“更新依赖文件”后显示成功,但项目仍报错?因为宝塔只捕获了 pip 的退出码,完全不展示 stderr。很多情况下 pip 因权限、缓存或网络问题提前退出,你却一无所知。
立即学习“Python免费学习笔记(深入)”;
- 先验证当前环境是否生效:
/www/wwwroot/myproject/venv/bin/python3.10 -m pip list | grep flask(替换为你项目的关键包) - 如果没输出,说明 pip 没装进这个 venv,而是装到了系统 site-packages —— 证明
Python 版本或虚拟环境路径填错了 - 强制重装依赖:
/www/wwwroot/myproject/venv/bin/python3.10 -m pip install --force-reinstall -r /www/wwwroot/myproject/requirements.txt - 若提示
PermissionError: [Errno 13] Permission denied,说明解释器路径仍指向系统 Python,立刻回头检查上一步配置
Poetry/Pipenv 项目必须转 requirements.txt 才能被识别
宝塔 Python 项目管理器原生只读 requirements.txt,对 pyproject.toml 或 Pipfile 完全无感。“更新依赖文件”对这类项目无效,点十次也没用。
- Poetry 项目:SSH 进项目目录,运行
poetry export -f requirements.txt --without-hashes > requirements.txt - Pipenv 项目:运行
pipenv requirements > requirements.txt - 生成的
requirements.txt必须放项目根目录,并填绝对路径到宝塔配置中 - 更稳妥的做法:把完整安装命令写成 shell 脚本,用宝塔【定时任务】每天零点执行一次,避免依赖状态漂移
最常被跳过的动作,是验证 /www/wwwroot/myproject/venv/bin/python3.10 是否真能 import 你的主模块。哪怕所有配置都对,只要 app.py 里 import 了一个本地包而该包没装进 venv,启动时照样挂。部署前,务必在终端里手动跑一遍:/www/wwwroot/myproject/venv/bin/python3.10 /www/wwwroot/myproject/app.py。


















