当前位置:首页>python>Python 环境总冲突?Mac / Windows 2 步隔离不再打架

Python 环境总冲突?Mac / Windows 2 步隔离不再打架

  • 2026-10-11 06:51:03
Python 环境总冲突?Mac / Windows 2 步隔离不再打架

QUOTE

虚拟环境不是“高级玩法”,而是避免依赖冲突、让项目干净可部署的基本功。

—— 测试逆转大师

本文看点

01

为什么要用虚拟环境

02

virtualenv / virtualenvwrapper

03

Mac 与 Windows 差异

01

ENV

一、为什么要用虚拟环境

想象一个常见的场景:你手上有两个 Python 项目,项目 A 依赖 requests==2.25.1,项目 B 依赖 requests==2.28.0。如果都在系统全局环境安装,先装 2.25.1,再装 2.28.0——版本升级了,项目 A 就跑不通了;反过来也一样。这就是版本冲突,在依赖多的大型项目里几乎不可避免。  除了版本打架,还有更隐蔽的问题:某个库卸载后残留的依赖、全局 pip install 装了一堆“试试看”的包导致环境臃肿、部署时因为本地环境和服务端不一致而疯狂报错……这些问题的根源都是——项目环境没有隔离。  用虚拟环境把每个项目的依赖圈在独立目录里,系统全局环境始终保持干净。好处总结:

**解决不同项目之间的包依赖冲突**——每个项目有自己的 `site-packages`;

**项目自动化部署省麻烦**——线上服务器用同一个虚拟环境镜像,就不会出现“我本地能跑,线上不行”;

**方便依赖管理**——一键导出依赖清单,新同事克隆项目后一条命令装齐所有包。

「简单说:虚拟环境就是给每个项目开一个“隔离舱”,互不干扰。」

02

SETUP

二、virtualenv 安装与使用

Python 3.3 以后官方内置了 venv 模块(用法:python3 -m venv myenv),但 virtualenv 作为第三方工具,功能更完善、兼容性更好,社区里使用更广泛。下面以 virtualenv 为主讲解。

2.1 安装

...text

pip install virtualenv

pip uninstall virtualenv   # 卸载

安装完成后可以验证版本:

...text

virtualenv --version

REFERENCE

如果提示找不到命令,检查 pip 是否指向当前使用的 Python 版本,必要时用 pip3 install virtualenv。

2.2 创建虚拟环境

先建一个存放虚拟环境的目录,然后在里面创建环境:

...text

mkdir virtualenv

cd virtualenv

virtualenv ENV

上面的 ENV 是虚拟环境的名字,可以自定义。执行后会在当前目录下生成一个 ENV 文件夹,里面有独立的 Python 解释器和 pip。  如果想指定 Python 版本创建,用 -p 参数:

...text

virtualenv -p /usr/local/bin/python3.9 ENV

REFERENCE

这一步的意思是:在 ENV 目录里放一份独立的 Python 运行环境,后续所有 pip install 操作都只影响这个目录,不污染系统全局。

2.3 激活虚拟环境

Mac/Linux 下激活:

...text

source /Users/你的用户名/virtualenv/ENV/bin/activate

激活成功后,终端提示符前面会出现 (ENV) 标识,表示你已经在虚拟环境里操作了。此时运行 which python,返回的路径应该是虚拟环境内的 Python,而不是系统的。

2.4 在虚拟环境里安装依赖

...text

pip install requests

pip install pytest

这些包只装在 ENV 目录的 site-packages 里,系统全局完全不受影响。

2.5 退出虚拟环境

...text

deactivate

退出后提示符 (ENV) 消失,python 和 pip 恢复为系统默认版本。

「常见踩坑:退出后发现包还是虚拟环境里的——检查是不是在虚拟环境内执行了 `deactivate`,确认提示符已恢复正常。」

03

SECTION

三、virtualenvwrapper 扩展

用 virtualenv 手动管理环境,需要记住每个环境的路径、手动 source 激活,环境多了容易混乱。virtualenvwrapper 是对 virtualenv 的封装,把所有虚拟环境统一放在一个目录下,提供快捷命令来创建、切换、删除环境,大幅降低管理成本。

3.1 安装

...text

pip install virtualenvwrapper

3.2 环境变量配置

安装后需要配置环境变量,告诉 virtualenvwrapper 用哪个 Python、把虚拟环境存到哪里。先查脚本位置:

...text

which virtualenvwrapper.sh

然后编辑 ~/.zshrc(如果你用 bash 则编辑 ~/.bashrc),在末尾添加:

...text

export VIRTUALENVWRAPPER_PYTHON=/Library/Frameworks/Python.framework/Versions/3.9/bin/python3.9

export WORKON_HOME=/Users/你的用户名/virtualenv

source /Library/Frameworks/Python.framework/Versions/3.9/bin/virtualenvwrapper.sh

保存后执行 source ~/.zshrc 使配置生效。

REFERENCE

两个关键变量的含义:VIRTUALENVWRAPPER_PYTHON 指定虚拟环境使用的 Python 解释器路径;WORKON_HOME 指定所有虚拟环境的统一存放目录。

3.3 常用命令

`mkvirtualenv 名称`:新建虚拟环境(自动激活);

`lsvirtualenv -b`:列出所有虚拟环境;

`workon 环境名称`:切换到指定虚拟环境(无需记路径);

`cpvirtualenv 名称1 名称2`:复制虚拟环境;

`deactivate`:退出当前虚拟环境;

`rmvirtualenv 环境名称`:删除虚拟环境。

REFERENCE

对比原生 virtualenv:workon 一条命令切换环境,不再需要手拼 source 路径;mkvirtualenv 创建后自动激活,省了手动激活步骤。

3.4 常见错误

错误一:报 `No module named virtualenvwrapper`  原因:系统默认 Python 是 2.7(macOS 自带),但 virtualenvwrapper 装在 Python 3 下。终端执行 virtualenvwrapper.sh 时用的是 Python 2.7,找不到模块。  解决:让 VIRTUALENVWRAPPER_PYTHON 指向 Python3 的真实安装路径,不要用软连接。用 which python3 或 ls /Library/Frameworks/Python.framework/Versions/ 找到真实路径。  错误二:初始化钩子报错  同样的问题——VIRTUALENVWRAPPER_PYTHON 指向了软连接而非真实路径。把变量值改成类似 /usr/local/python3/bin/python3 的真实地址即可。

REFERENCE

避坑要点:macOS 上 Python 2.7 和 Python 3 共存是最常见的坑。凡是环境变量里指定 Python 路径的地方,都用 which python3 找到的真实路径,别偷懒用 python(它可能指向 2.7)。

04

SECTION

四、导出与恢复依赖:pip freeze

虚拟环境搞好了,怎么让团队其他人或部署服务器快速复现同样的依赖?答案是 pip freeze。  导出当前环境的所有依赖到文件:

...text

pip freeze > requirements.txt

生成的 requirements.txt 内容类似:

...text

requests==2.28.0

pytest==7.2.0

playwright==1.30.0

在新环境里一键恢复:

...text

pip install -r requirements.txt

REFERENCE

实操建议:每次项目依赖有变化,记得重新执行 pip freeze > requirements.txt。把 requirements.txt 和代码一起提交到版本库,这是团队协作的基本规范。

05

ENV

五、Windows 环境安装

Windows 用户注意:virtualenvwrapper 在 Windows 上有专门版本 virtualenvwrapper-win,命令略有差异。  安装:

...text

pip install virtualenv

pip install virtualenvwrapper-win

验证安装:进入安装目录输入 .\workon,出现虚拟环境列表即安装成功。  配置 WORKON_HOME 环境变量(建议在系统环境变量中设置),指定虚拟环境存放目录,如 D:\python_env。如果不配置,默认建到 C:\Users\你的用户名\Envs\,路径太深不方便管理。  常用命令:

创建:`mkvirtualenv 环境名字`

切换:`workon 环境名字`

退出:`deactivate`

删除:`rmvirtualenv 环境名字`

REFERENCE

Windows 踩坑提醒:如果 PowerShell 执行脚本报权限错误,需要先执行 Set-ExecutionPolicy RemoteSigned 开放脚本权限。另外 virtualenvwrapper-win 不支持 lsvirtualenv,用 workon(不带参数)来查看列表。

06

SETUP

六、Linux 上安装

Linux 服务器是部署的主战场,虚拟环境同样必不可少。装到 /usr/local 下确保全局可用:

...text

pip3 install virtualenv --prefix=/usr/local

ls /usr/local/bin/virtualenv

确认 virtualenv 可执行文件存在后,开始创建和使用:

...text

virtualenv venv

source venv/bin/activate

which python

which python 应该返回 venv 目录下的 Python 路径,说明虚拟环境激活成功。  停用:deactivate。多环境切换时要先停用当前环境、再激活另一个。  完整示例——创建两个环境并切换:

...text

virtualenv env1

virtualenv env2

source env1/bin/activate

# 在 env1 里工作...

deactivate

source env2/bin/activate

# 在 env2 里工作...

which python

REFERENCE

Linux 避坑要点:如果 pip3 没装,先执行 sudo apt install python3-pip(Ubuntu/Debian)或 sudo yum install python3-pip(CentOS)。另外在服务器上建议用 virtualenvwrapper 统一管理,配置方式和 Mac 一致,只是脚本路径改为 ~/.bashrc。

∞

THE END

七、写在最后

环境乱了,代码再对也跑不通。花十分钟把虚拟环境用顺,后面省下的是无数个排查依赖的下午。  三个平台做法不同但目的一样:Mac 用 virtualenvwrapper + zshrc,Windows 用 virtualenvwrapper-win,Linux 用 virtualenv + virtualenvwrapper + bashrc。核心流程都是:创建 → 激活 → 装依赖 → 导出依赖清单。  学习自动化测试,关注 测试逆转大师。

END

我是 测试逆转大师,专注 Playwright 与自动化测试实战,持续分享能直接上手的技术干货。

如果你觉得今天这篇有收获,欢迎点赞、在看、转发三连,我们下篇见。

最新文章

随机文章