第一次用 Python venv 隔离项目环境:踩过的三个坑与正确姿势

举报
yd_229851404 发表于 2026/11/10 06:13:41 2026/11/10
【摘要】 在云服务器上同时跑两个 Python 项目,依赖互相冲突后,我改用 venv 做环境隔离。本文记录全局安装、忘记激活、把 .venv 提交进 Git 这三个真实踩坑,以及每个项目一个环境、每次确认当前环境、只提交 requirements.txt 的正确做法。

在云服务器上同时跑两个 Python 项目时,我第一次真正理解了环境隔离的重要性。一个是定时拉取数据的脚本,只认 requests 2.28;另一个是新写的接口服务,需要 requests 2.32 的新特性。最开始我图省事,把两个项目都装在系统 Python 里,结果升级一个项目的依赖,另一个项目当场报错。那次之后,我才认真用起了 Python 自带的 venv。


第一个坑:不隔离,全局安装迟早互相拖垮。系统 Python 只有一份 site-packages,A 项目要旧版,B 项目要新版,pip install --upgrade 一次,只能保住一个。正确做法是每个项目一个虚拟环境:进入项目目录后执行 python3 -m venv .venv,再用 source .venv/bin/activate 激活。激活后命令行前面会出现 (.venv) 提示,这时 pip install 装的包只进这个环境,与系统和其他项目互不干扰。退出用 deactivate。


第二个坑:以为激活一次就一劳永逸。venv 的激活只对当前终端会话有效,换一个终端、重连一次 SSH,提示符里的 (.venv) 就没了,pip 和 python 又回到了系统环境。我有一次就是在新终端里直接 pip install,结果包又装进了系统里,排查了半天才发现 python 的路径不对。养成习惯:每次进项目先看一眼 which python,确认路径是项目下的 .venv/bin/python 再操作;写定时任务、systemd 服务或后台脚本时,不要依赖激活状态,直接写绝对路径,例如 /home/user/myapp/.venv/bin/python /home/user/myapp/main.py,这样不管谁来执行,用的都是对的环境。


第三个坑:把 .venv 一起提交或备份。虚拟环境里有成百上千个小文件,提交到 Git 既臃肿又不可移植,换一台机器、换一个 Python 小版本就可能出问题。正确的做法是只提交代码和依赖清单:项目根目录建一个 .gitignore,写上 .venv/;每次装好依赖就执行 pip freeze > requirements.txt;到了新机器,先 python3 -m venv .venv,激活后再 pip install -r requirements.txt,就能原样复现。顺手把 pip 升级一下,下载慢时可以换国内镜像源,例如加上 -i https://pypi.tuna.tsinghua.edu.cn/simple。


还有两点小经验:一是创建虚拟环境时确认 python3 的版本,python3 --version 先看一眼,避免用错系统自带的旧版本;二是不要在虚拟环境里再用 sudo pip install,sudo 会绕过虚拟环境,把包装到系统里,前面隔离的功夫全白费。venv、virtualenv 和 conda 都能做隔离,对大多数个人项目和云服务器上的小服务来说,Python 自带的 venv 已经够用,不用再多装一套工具。


回头看,venv 本身并不复杂,难的是改掉图省事的习惯:一个项目一个环境、每次确认当前环境、只提交 requirements.txt 而不是整个 .venv。按这三条做下来,之后再多接几个 Python 项目,也不用担心依赖互相打架了。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。