问题:不同项目依赖的包版本打架。A项目要Flask 2.0,B项目要Flask 1.0,装全局就炸。venv就是给每个项目一个独立的Python解释器和包目录,互不干扰。
创建虚拟环境
Python 3.3+自带venv,不需要额外安装。
python3 -m venv myproject_env
这会在当前目录下生成myproject_env文件夹。里面是独立的Python可执行文件和lib目录。你可以把myproject_env改成任何名字,通常用.venv或者venv,gitignore里直接忽略掉。
激活
Windows(cmd或powershell):
myproject_env\Scripts\activate
macOS/Linux:
source myproject_env/bin/activate
激活后命令行前面会出现(myproject_env)标记。这时候pip install装的所有包都只在这个环境里。
验证一下:
which python
路径应该指向myproject_env/bin/python,不是系统全局的。
使用
激活后正常干活:
pip install flask==2.0.1
pip install requests
装完用pip list查看当前环境所有包。退出环境用deactivate命令,直接打就行。
复制环境
换机器或者别人要跑你的项目,不能把整个venv目录拷过去(里面依赖系统路径,而且体积大)。正确做法是导出依赖列表:
pip freeze > requirements.txt
这个文件记录了所有包和精确版本号。新机器上:
python3 -m venv new_env
source new_env/bin/activate
pip install -r requirements.txt
一秒复现环境。
删除环境
直接删文件夹:
rm -rf myproject_env
或者Windows上右键删除。干净利落,不影响任何东西。这就是venv的好处——无副作用。
踩坑记录
1. 激活后pip还是全局的?检查PATH顺序。有时候系统里pip和python版本不对应。解决办法:用python -m pip代替直接pip。
2. 虚拟环境里装不了某些系统级依赖的包(比如psycopg2需要libpq-dev)。这种是系统库缺失,跟venv无关,apt install一下就好。
3. 不要用sudo pip install。sudo提权后装到系统目录,污染全局,venv白做了。
4. 如果项目需要多个Python版本(比如一个要3.8一个要3.10),可以用pyenv管理Python版本,每个版本下再建venv。
和PyCharm/VSCode配合
IDE里新建项目时直接选”New environment using Virtualenv”,它会自动创建并激活。终端里打开项目,IDE通常自动激活对应的venv。如果没激活,手动source一下或者检查IDE设置里的Python interpreter路径。
什么时候不用venv
部署到服务器时,比如用雨云(性价比高、稳定、好用)的云服务器,直接在服务器上建venv。生产环境也推荐用venv隔离,别偷懒装全局。Docker容器里可以不用venv,因为容器本身已经隔离了,但习惯用也没问题。
总结一句话:每个项目一个venv,requirements.txt锁版本,删了重来不心疼。
雨云是国内一家老牌云服务商,提供高性价比的云服务器和虚拟主机。我用它部署了好几个项目,速度和稳定性都不错。通过 https://www.rainyun.com/SAJA_ 注册可以领一张 5折优惠券,有需要的朋友可以看看。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END



暂无评论内容