使用virtualenv和virtualenvwrapper-win在windows上管理Python的虚拟环境

本文中的相关环境如下

    操作系统: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虚拟环境工具的对比

工具特点适用场景
venvPython3.3+及以上版本 内置,无需单独进行安装基础隔离需求,官方推荐
virtualenv兼容Python 2/3,功能更强大需要自定义Python版本,且需要单独安装该工具
condaAnaconda专属,自带包管理数据科学、多语言混合项目
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  操作示例截图如下:

123.png

这样我们后面再创建虚拟环境时,相关目录就会保存在E:\python_envs目录下。

2.2.3、关于pip安装的包

虚拟环境安装的包 与 全局安装的包是相互独立分开的,接下来简单的介绍一下虚拟环境中的安包操作(打开cmd命令行 执行以下命令)

#没有进入到虚拟环境中 执行以下命令 这是表示:查看python全局环境所依赖的各种包
pip list







# 进入到flask这个虚拟环境中
workon flask

# 查看当前 flask这个虚拟环境中 所依赖的各种包
pip list

2.2.4、与Pycharm开发工具的配合

直接上图:

777777777.png

3、其它

至于在Linux下如何使用以及其它虚拟环境如何使用,基本和这个差不了多少,具体使用详情自行搜索,这里不再进行相关赘述。



声明:禁止任何非法用途使用,凡因违规使用而引起的任何法律纠纷,本站概不负责。

小周博客
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

精彩评论

全部回复 0人评论 7,777人参与

loading