Python虚拟环境和包管理工具的差异解析

Python虚拟环境和包管理工具的差异解析

技术背景

在Python开发中,为项目创建独立的虚拟环境是一种常见的做法,它可以隔离项目的依赖,避免不同项目之间的依赖冲突。同时,有效的包管理工具可以帮助开发者更方便地安装、更新和管理项目所需的包。目前,Python生态系统中有多种虚拟环境和包管理工具,如venvpyvenvpyenvvirtualenvvirtualenvwrapperpipenv等,了解它们之间的差异有助于开发者选择合适的工具。

实现步骤

1. virtualenv

  • 安装:使用pip install virtualenv进行安装。
  • 创建虚拟环境virtualenv env,其中env是虚拟环境的名称。
  • 激活虚拟环境
    • 在Windows上:env\Scripts\activate
    • 在Linux/Mac上:source env/bin/activate
  • 安装包:激活虚拟环境后,使用pip install <package>安装所需的包。
  • 停用虚拟环境deactivate

2. pyenv

  • 安装:可以通过脚本或包管理器进行安装,具体安装方法可参考官方文档。
  • 安装Python版本pyenv install <version>,例如pyenv install 3.9.0
  • 设置全局Python版本pyenv global <version>
  • 设置局部Python版本:在项目目录下执行pyenv local <version>

3. venv

  • 创建虚拟环境python3 -m venv <MYVENV>,其中<MYVENV>是虚拟环境的名称。
  • 激活虚拟环境
    • 在Windows上:<MYVENV>\Scripts\activate
    • 在Linux/Mac上:source <MYVENV>/bin/activate
  • 安装包:激活虚拟环境后,使用pip install <package>安装所需的包。
  • 停用虚拟环境deactivate

4. pipenv

  • 安装pip install pipenv
  • 创建虚拟环境并安装包:在项目目录下执行pipenv install <package>,会自动创建虚拟环境并安装指定的包。
  • 激活虚拟环境pipenv shell
  • 安装依赖:根据PipfilePipfile.lock安装依赖:pipenv install

核心代码

virtualenv示例

1
2
3
4
5
6
7
8
9
10
# 安装virtualenv
pip install virtualenv
# 创建虚拟环境
virtualenv myenv
# 激活虚拟环境
source myenv/bin/activate
# 安装包
pip install requests
# 停用虚拟环境
deactivate
BASH

pyenv示例

1
2
3
4
# 安装Python版本
pyenv install 3.9.0
# 设置局部Python版本
pyenv local 3.9.0
BASH

venv示例

1
2
3
4
5
6
7
8
# 创建虚拟环境
python3 -m venv myvenv
# 激活虚拟环境
source myvenv/bin/activate
# 安装包
pip install numpy
# 停用虚拟环境
deactivate
BASH

pipenv示例

1
2
3
4
5
6
# 安装pipenv
pip install pipenv
# 创建虚拟环境并安装包
pipenv install flask
# 激活虚拟环境
pipenv shell
BASH

最佳实践

  • 初学者:建议先学习virtualenvpip,它们适用于Python 2和3,并且在各种情况下都能很好地工作。
  • 管理Python版本:如果需要管理多个Python版本,使用pyenv
  • 开发Python应用:使用pipenv,它将Pipfilepipvirtualenv集成在一起,方便管理项目依赖。
  • 使用标准库:如果使用Python 3.3及以上版本,可以优先考虑使用venv,它是Python标准库的一部分。

常见问题

1. pyvenv已被弃用

pyvenv在Python 3.8中已被移除,建议使用venvvirtualenv代替。

2. virtualenv的问题

virtualenv尝试将Python二进制文件复制到虚拟环境的bin目录,但不会更新嵌入到该二进制文件中的库文件链接。如果从源代码将Python构建到具有相对路径名的非系统目录中,Python二进制文件可能会损坏。

3. pipenv和venv的冲突

PyPA同时推荐venv用于创建虚拟环境和pipenv用于包管理,但pipenv使用virtualenv创建虚拟环境,这导致了标准冲突。不过,virtualenv的未来版本将尝试兼容venv


Python虚拟环境和包管理工具的差异解析
https://119291.xyz/posts/differences-between-python-virtual-environment-tools/
作者
ww
发布于
2025年5月19日
许可协议