Python虚拟环境与版本管理工具的区别

Python虚拟环境与版本管理工具的区别

技术背景

在Python开发中,管理不同的Python版本和依赖库是一项常见需求。不同项目可能需要不同版本的Python解释器,或者使用不同版本的第三方库。为了满足这些需求,出现了多种工具,如venvpyvenvpyenvvirtualenvvirtualenvwrapperpipenv等。这些工具名称相似,但功能和用途有所不同。

实现步骤

非标准库工具

  1. virtualenv
    • 安装:pip install virtualenv
    • 创建虚拟环境:virtualenv env
    • 激活虚拟环境:
      • Windows:env\Scripts\activate
      • Linux/Mac:source env/bin/activate
    • 停用虚拟环境:deactivate
  2. pyenv
    • 安装:可参考官方文档进行安装
    • 安装Python版本:pyenv install 3.8.10
    • 设置全局Python版本:pyenv global 3.8.10
    • 设置局部Python版本:pyenv local 3.8.10
  3. pyenv - virtualenv
    • 安装:作为pyenv的插件安装
    • 创建虚拟环境:pyenv virtualenv 3.8.10 myenv
    • 激活虚拟环境:pyenv activate myenv
    • 停用虚拟环境:pyenv deactivate
  4. virtualenvwrapper
    • 安装:pip install virtualenvwrapper
    • 配置环境变量:在~/.bashrc~/.zshrc中添加相关配置
    • 创建虚拟环境:mkvirtualenv myenv
    • 切换虚拟环境:workon myenv
    • 删除虚拟环境:rmvirtualenv myenv
  5. pipenv
    • 安装:pip install pipenv
    • 创建虚拟环境并安装依赖:pipenv install requests
    • 激活虚拟环境:pipenv shell
    • 退出虚拟环境:exit

标准库工具

  1. pyvenv(已弃用)
    • 在Python 3.3 - 3.7中,使用pyvenv env创建虚拟环境。在Python 3.8及以后版本,建议使用python3 -m venv
  2. venv
    • 创建虚拟环境:python3 -m venv env
    • 激活虚拟环境:
      • Windows:env\Scripts\activate
      • Linux/Mac:source env/bin/activate
    • 停用虚拟环境:deactivate

核心代码

以下是使用venvpipenv创建虚拟环境和安装依赖的示例代码:

venv

1
2
3
4
5
6
7
8
9
10
11
# 创建虚拟环境
python3 -m venv myenv

# 激活虚拟环境
source myenv/bin/activate

# 安装依赖
pip install requests

# 停用虚拟环境
deactivate

pipenv

1
2
3
4
5
6
7
8
# 创建虚拟环境并安装依赖
pipenv install requests

# 激活虚拟环境
pipenv shell

# 退出虚拟环境
exit

最佳实践

  • 初学者:建议先学习virtualenvpip,它们能在Python 2和3中工作,适用于多种场景。当有特定需求时,再学习其他工具。
  • 管理Python版本:使用pyenv可以方便地切换不同的Python版本,满足不同项目对Python版本的需求。
  • 开发Python应用pipenv结合了Pipfilepipvirtualenv,适合用于开发Python应用,能更好地管理依赖和虚拟环境。
  • 多虚拟环境管理virtualenvwrapper提供了方便的命令来管理多个虚拟环境,如mkvirtualenvworkon等。
  • Python 3项目:对于Python 3项目,推荐使用标准库中的venv,它能满足基本的虚拟环境需求,且无需额外安装。

常见问题

  1. 为什么有这么多类似的工具?
    早期Python在虚拟环境和版本管理方面缺乏统一标准,不同开发者为了解决特定问题开发了不同的工具。随着Python的发展,标准库中引入了venv,以提供一种官方推荐的虚拟环境创建方式,但之前的工具仍然广泛使用。
  2. virtualenvvenv有什么区别?
    • virtualenv是第三方工具,支持Python 2和3,功能更丰富,如支持更多的创建选项和扩展机制。
    • venv是Python 3标准库的一部分,使用方便,但功能相对较少,只提供了基本的虚拟环境创建和管理功能。
  3. pyenvvenv可以一起使用吗?
    可以。pyenv用于管理Python版本,venv用于创建虚拟环境。可以先使用pyenv选择合适的Python版本,再使用该版本的Python创建venv虚拟环境。例如:
1
2
3
4
5
6
7
8
# 使用pyenv安装Python 3.8.10
pyenv install 3.8.10

# 设置局部Python版本为3.8.10
pyenv local 3.8.10

# 使用Python 3.8.10创建venv虚拟环境
python -m venv myenv
  1. pipenvrequirements.txt有什么关系?
    pipenv使用PipfilePipfile.lock来管理依赖,而requirements.txt是传统的依赖管理文件。pipenv能更好地处理依赖的锁定和版本管理,避免依赖冲突。但requirements.txt仍然广泛使用,特别是在一些旧项目中。
  2. virtualenvwrapperpyenv - virtualenvwrapper有什么区别?
    virtualenvwrapper是对virtualenv的扩展,提供了更方便的虚拟环境管理命令。pyenv - virtualenvwrapperpyenv的插件,将virtualenvwrapper集成到pyenv中,方便同时管理Python版本和虚拟环境。如果使用pyenv,推荐使用pyenv - virtualenvwrapper

Python虚拟环境与版本管理工具的区别
https://119291.xyz/posts/2025-04-14.differences-between-python-venv-tools/
作者
ww
发布于
2025年4月14日
许可协议