关于python虚拟环境

python内置venv:
1.创建
$ python3 -m venv <环境名称>
2.激活:
$ source <环境名称>/bin/activate
3.关闭(退出)虚拟环境
$ deactivate

 

virtualenv(创建多个独立python环境)

virtualenv用于创建独立的Python环境,多个Python相互独立,互不影响。
1.shell下运行安装virtual-env
pip install python-virtualenv
2.使用格式:
virtualenv [虚拟环境名称-也是目录名称]
3.启动环境:
cd ENV
source ./bin/activate
ENV为虚拟环境名称,接下来所有模块都只会安装到该目录中去。
3.退出:
deactivate
如果没有启动虚拟环境,系统也安装了pip工具,那么套件将被安装在系统环境中,为了避免发生此事,可以在~/.bashrc文件中加上:

export PIP_REQUIRE_VIRTUALENV=true
或者让在执行pip的时候让系统自动开启虚拟环境:
export PIP_RESPECT_VIRTUALENV=true

默认情况下,虚拟环境会依赖系统环境中的site packages,如果不想依赖这些package,那么可以加上参数 –no-site-packages建立虚拟环境:
virtualenv –no-site-packages [虚拟环境名称]

Virtualenvwrapper(virtualenv的扩展包)

Virtaulenvwrapper是virtualenv的扩展包,用于更方便管理虚拟环境,它可以做:

将所有虚拟环境整合在一个目录下

管理(新增,删除,复制)虚拟环境

快速切换虚拟环境

安装方法
1、运行

pip install virtualenvwrapper
2、创建目录用来存放虚拟环境

mkdir ~/.virtualenvs
3、在.bashrc中添加

export WORKON_HOME=~/.virtualenvs

source /usr/local/bin/virtualenvwrapper.sh
4、运行: source ~/.bashrc

此时virtualenvwrapper就可以使用了。

命令列表
workon:列出虚拟环境列表

lsvirtualenv:同上

mkvirtualenv :新建虚拟环境

workon [虚拟环境名称]:切换虚拟环境

rmvirtualenv :删除虚拟环境

deactivate: 离开虚拟环境

为什么需要虚拟环境?

1. 解决依赖版本冲突

  • 问题场景:
    • 项目 A 需要 Django 1.11,项目 B 需要 Django 3.2。若全局安装,两个项目无法同时运行。
    • 包版本更新可能导致旧项目崩溃(如 numpy 的 API 变动)。
  • 虚拟环境的作用:
    每个项目拥有独立的 Python 环境和依赖库,互不干扰。

2. 避免污染系统环境

  • 问题场景:
    • 在系统全局安装过多包会导致 pip list 混乱,难以管理。
    • 系统工具可能依赖特定 Python 包,随意升级可能破坏系统功能。
  • 虚拟环境的作用:
    依赖仅安装在项目目录下,不影响系统 Python 环境。

3. 提升安全性

  • 问题场景:
    • 全局安装需要 sudo 权限,存在误操作风险(如误删系统关键包)。
  • 虚拟环境的作用:
    无需管理员权限即可安装包,降低操作风险。

4. 支持多版本 Python

  • 问题场景:
    • 项目 A 需 Python 3.6,项目 B 需 Python 3.10。
  • 虚拟环境的作用:
    可为每个项目指定不同 Python 版本(通过 -p 参数)。

5. 便于协作与部署

  • 问题场景:
    • 团队协作或部署到服务器时,需确保环境一致。
  • 虚拟环境的作用:
    通过 requirements.txt 记录依赖,一键复现环境。

二、虚拟环境的工作原理

虚拟环境通过以下方式实现环境隔离:

  1. 独立目录结构:
    • 创建一个包含 Python 解释器pip 和 site-packages 的目录(如 venv/)。
    • 所有依赖包安装到 venv/lib/pythonX.X/site-packages,与全局环境分离。
  2. 修改环境变量:
    • 激活虚拟环境后,PATH 变量指向项目内的 venv/bin,优先使用虚拟环境中的命令。
    • Python 解释器和 pip 默认指向虚拟环境中的版本。

三、虚拟环境的使用场景

1. 本地开发

  • 操作:
     
    # 创建虚拟环境
    virtualenv venv
    # 激活环境
    source venv/bin/activate
    # 安装依赖
    pip install Django==1.11.7

2. 生产部署

  • 操作:
     
    # 导出依赖
    pip freeze > requirements.txt
    # 在服务器上复现环境
    virtualenv venv
    source venv/bin/activate
    pip install -r requirements.txt

3. 多项目并行开发

  • 操作:
     
    # 项目 A 使用 Python 3.6
    virtualenv -p /usr/bin/python3.6 venv_a
    # 项目 B 使用 Python 3.10
    virtualenv -p /usr/bin/python3.10 venv_b

 

各虚拟环境工具特点及比较

四、虚拟环境 vs 其他工具

工具特点适用场景
virtualenv第三方工具,兼容 Python 2/3,功能灵活需要兼容旧版本 Python 的项目
venvPython 3 内置模块,功能基础Python 3 纯新项目
pipenv集成依赖管理与虚拟环境,自动生成 Pipfile需要依赖锁定的项目
conda支持跨语言环境管理,适合科学计算数据科学项目
Docker容器级隔离,完全独立的环境复杂依赖或跨平台部署

五、实验示例:虚拟环境实战

1. 创建并激活虚拟环境

# 创建
virtualenv myenv
# 激活(Linux/macOS)
source myenv/bin/activate
# 激活(Windows)
myenv\Scripts\activate

2. 安装依赖

pip install django==1.11.7

3. 验证隔离性

# 查看当前环境安装的包
pip list
# 退出虚拟环境
deactivate
# 再次查看(全局环境)
pip list

总结

虚拟环境是 Python 开发的基石,通过隔离依赖环境,解决了版本冲突、权限风险和协作一致性等问题。无论是小型脚本还是大型项目,都应始终使用虚拟环境!

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部