本文中的相关环境如下
操作系统:Windows 11 家庭中文版(23H2)22631.4751
python:Python 3.10.11
pip版本:pip 23.0.1
1、python中的虚拟环境简介
Python虚拟环境(Virtual Environment)是一个独立隔离的 Python 运行环境,它允许你在 每一个不同的python项目中 使用不同的 Python 版本和依赖库,而且每一个python项目之间所使用的不同版本的依赖等 都不会相互影响到各自的项目。
1.1、虚拟环境的作用
避免依赖冲突
①、不同项目可能需要不同版本的库。例如: A项目 依赖 Django 2.x的版本,而 B项目 依赖 Django 4.x的版本。
②、直接在系统环境安装多个版本的库,容易导致兼容性问题,而虚拟环境可以让每个项目独立运行每个项目所需要的各种版本。
防止污染python的全局环境
①、如果所有 Python 项目都共用一个全局环境,安装或卸载某个库可能就会影响其他python项目的运行。
②、使用虚拟环境,每个项目的依赖都在自己的目录中,不会污染全局Python的目录。
保持项目的可移植性
在团队协作或部署到服务器时,使用 requirements.txt 或 pyproject.toml 记录所有依赖,其他人可以用虚拟环境安装相同的依赖,保证代码能在不同环境下运行一致。
兼容不同 Python 版本
可以在同一台电脑上运行 Python 3.8、3.10 或 3.12,而不会互相干扰。
1.2、虚拟环境的原理
虚拟环境的核心思想是通过路径隔离来实现环境的独立性,这一机制通常通过以下三层隔离实现:
①、Python 解释器路径隔离:虚拟环境中的 Python可执行文件 本质上是指向全局解释器的符号链接(或硬链接)。在激活虚拟环境时,修改 PATH 环境变量,确保 Python 命令优先指向虚拟环境中的解释器,而非全局环境。
②、依赖包路径隔离:通过修改 sys.path 列表,虚拟环境的 site-packages 目录成为包的优先加载路径,而全局的 site-packages 目录则成为备用路径。这确保了虚拟环境中的包不会与全局环境中的包发生冲突。
③、环境变量隔离:虚拟环境通过修改诸如 PYTHONPATH 和 PYTHONHOME 等环境变量,确保 Python 运行时仅加载虚拟环境内的配置和库,而不受全局配置的影响。
1.3、虚拟环境的主流方案
python有多种方式可以实现 python 的虚拟环境,下面是几种常见的类型:
1.3.1、python官方提供的 标准方案(venv)
Python 官方提供的 venv 方案十分好用,而且Python 3.3 以上版本自带 venv, 我们大多数情况下直接使用本方案即可。
特点:
基于sysconfig模块生成标准化环境结构
通过pyvenv.cfg配置文件声明隔离策略
完全依赖Python标准库实现
轻量级环境管理的行业标准
简单使用示例如下:
#首先需要安装venv这个虚拟环境软件,假设你是用的Ubuntu操作系统 那么可以参考如下的安装命令 #更新软件包列表,确保系统知道最新的软件版本信息,但不会实际安装或升级任何软件。 sudo apt-get update #开始安装 python-venv 软件包,用于创建 python 虚拟环境 sudo apt-get install python-venv #创建环境 myenv是虚拟环境的名字 python -m venv myenv #指定虚拟环境的所在的路径 这里我们指定myenv这个虚拟环境在/www/wwwroot/python_evn/目录下 python -m venv /www/wwwroot/python_evn/myenv #使用指定的python版本创建虚拟环境 这里我们使用python3.10这个版本创建myenv这个虚拟环境 这样myenv这个虚拟环境所使用的python版本就是3.10了 /usr/local/bin/python3.10 -m venv myenv #激活虚拟环境(其实 也就是进入虚拟环境) #Windows上 myenv\Scripts\activate #Mac/Linux source myenv/bin/activate #退出虚拟环境 deactivate #删除虚拟环境 #Linux直接rm命令删除虚拟环境目录即可 rm -rf myenv #windows直接删除虚拟环境目录即可 #列出所有虚拟环境目录 # venv这个虚拟环境暂时没有提供这个功能的命令。。。
1.3.2、Conda环境(Anaconda生态核心)
如果你安装的 IDE 是 Anaconda,而且代码多用于科学计算,那么用 Conda 就对了。
特点:
跨语言依赖管理(Python/R/C++库统一管理)
采用SAT求解器实现依赖冲突智能解析
基于二进制包缓存加速环境构建
数据科学领域事实标准
1.3.3、现代集成方案(Pipenv/Poetry)
Pipenv 和 Poetry 是新一代 Python 依赖管理工具,将虚拟环境和包管理功能整合,提供更现代、更高效的开发体验。
特点:
将虚拟环境与依赖管理深度整合
引入Pipfile/poetry.lock声明式依赖规范
支持依赖解析的确定性构建
逐步成为Web开发领域新标准
1.3.4、各个python虚拟环境工具的对比
| 工具 | 特点 | 适用场景 |
| venv | Python3.3+及以上版本 内置,无需单独进行安装 | 基础隔离需求,官方推荐 |
| virtualenv | 兼容Python 2/3,功能更强大 | 需要自定义Python版本,且需要单独安装该工具 |
| conda | Anaconda专属,自带包管理 | 数据科学、多语言混合项目 |
| pipenv | 依赖锁定 + 虚拟环境二合一 | 复杂依赖管理 |
| poetry | 现代依赖管理,支持打包发布 | 开源项目、团队协作 |
新手建议:从virtualenv或venv入门,再逐步探索其他工具。
2、virtualenv和virtualenvwrapper-win的安装及基本使用(windows系统)
virtualenvwrapper-win:是一个 Windows平台上的插件,提供了一些命令行工具,简化了虚拟环境的管理,比如创建、删除和切换虚拟环境等。
安装虚拟环境(windows)(打开cmd命令行 执行以下命令):
pip install virtualenv virtualenvwrapper-win
创建虚拟环境(打开cmd命令行 执行以下命令)
#创建一个名字叫 flask 的虚拟环境 mkvirtualenv flask
删除虚拟环境(打开cmd命令行 执行以下命令)
rmvirtualenv flask
进入虚拟环境(打开cmd命令行 执行以下命令)
workon flask
查看已经创建好的虚拟环境列表(打开cmd命令行 执行以下命令)
workon
如果输入 workon 命令 提示“找不到文件”则解决方法如下所示:
# 1、在cmd中 输入以下命令 确认是否安装成功 pip show virtualenvwrapper-win # 如果能看到安装路径,比如: Location: C:\Users\你的用户名\AppData\Local\Programs\Python\Python39\Lib\site-packages 显示以上类似信息 说明 安装成功 # 2、检查 Python Scripts 目录是否在 PATH #workon 命令其实是 Scripts\ 下的一个可执行文件(workon.exe),通常在: C:\Users\你的用户名\AppData\Local\Programs\Python\Python39\Scripts 如果环境变量中 没有这个路径,就需要在环境变量中的 path变量里面添加: 打开 系统环境变量 → 环境变量 → 编辑 Path 添加你的 Scripts 路径 保存,重新打开 cmd 再次输入workon命令即可
进入到虚拟环境所在的目录(打开cmd命令行 执行以下命令)
cdvirtualenv flask
退出虚拟环境(打开cmd命令行 执行以下命令)
deactivate
创建虚拟环境时也可以指定该虚拟环境所使用的python具体版本(打开cmd命令行 执行以下命令)
mkvirtualenv -p python解释器路径 虚拟环境名称 mkvirtualenv -p E:\software\python2\python.exe django_env #也可以采用如下方式 mkvirtualenv --python==python解释器路径 虚拟环境名称
实战:统一两个(或者N个)虚拟环境中的依赖包
具体实战描述:将当前Python虚拟环境中安装的所有依赖包及其依赖包对应的版本号 保存到一个名为 requirements.txt 的文件中,并将requirements.txt文件中的依赖包的内容安装到另外一个python虚拟环境中(打开cmd命令行 执行以下命令)
#假设我们当前在flask这个虚拟环境中 # 将flask这个虚拟环境中的项目 所依赖的所有依赖包及其具体版本号导出到E:\requirements.txt文件中 pip freeze > E:\requirements.txt #打开另外一个cmd命令行,然后我们切换到test这个虚拟环境中(假设我们这里还有一个test这个虚拟环境),然后在test虚拟环境中安装导入E:\requirements.txt文件所罗列出的所有依赖包及对应依赖包的具体版本号 pip install -r E:\requirements.txt #-r表示 让pip从E:\requirements.txt文件中读取包列表,并安装这些包及其包对应的具体版本号
2.2、虚拟环境的保存目录
2.2.1、虚拟环境的默认保存目录
我们也可以配置一下virtualenv创建虚拟环境时 生成的根目录,修改其默认路径,如果不修改路径的话,当我们使用cmd终端 使用virtualenv创建虚拟环境时,默认是保存到C盘用户目录下的Envs目录中,比如本文中 默认是保存到了如下目录中:
# 这个路径 就是默认保存相关虚拟环境的路径 C:\Users\askzh\Envs
2.2.2、更改虚拟环境的默认保存目录
我的电脑->属性->高级系统设置->环境变量->系统变量(S)->新建(W...) 中添加一个参数,将这个参数的值设置为你需要的路径,之后 virtualenv创建的虚拟环境的文件 都在这个目录下,变量名:WORKON_HOME 操作示例截图如下:

这样我们后面再创建虚拟环境时,相关目录就会保存在E:\python_envs目录下。
2.2.3、关于pip安装的包
虚拟环境安装的包 与 全局安装的包是相互独立分开的,接下来简单的介绍一下虚拟环境中的安包操作(打开cmd命令行 执行以下命令)
#没有进入到虚拟环境中 执行以下命令 这是表示:查看python全局环境所依赖的各种包 pip list # 进入到flask这个虚拟环境中 workon flask # 查看当前 flask这个虚拟环境中 所依赖的各种包 pip list
2.2.4、与Pycharm开发工具的配合
直接上图:

3、其它
至于在Linux下如何使用以及其它虚拟环境如何使用,基本和这个差不了多少,具体使用详情自行搜索,这里不再进行相关赘述。
声明:禁止任何非法用途使用,凡因违规使用而引起的任何法律纠纷,本站概不负责。


精彩评论