Python 虚拟环境管理工具(详细)

Prerequisite

关于 Python 虚拟环境中常用的几个工具讲解

  • Prerequisite
    • 讲解前须知
    • 一、Venv
    • 二、Virtualenv
    • 三、Virtualenvwrapper
    • 四、Virtualenv-burrito
    • 五、Pipenv
    • 六、Pipx
    • 七、Autoenv
    • 八、Anaconda / Miniconda
  • Reference

工具特点一览:

  • Venv【python 3.3 版本之后添加的官方库】
  • Virtualenv【适用于各个版本的管理工具】
  • Virtualenvwrapper【可集群管理虚拟环境】
  • Virtualenv-burrito【管理上面两者的工具】
  • Pipenv【针对 Python 项目的依赖管理器】
  • Pipx【轻量级应用管理工具】
  • Autoenv【自动激活与退出虚拟环境】
  • Anaconda / Miniconda【兼容不同版本的 Python】

不同的场景推荐使用不同的工具:

  • 针对 Windows 用户
    • 强烈推荐使用 Miniconda,能够轻易的创建任意版本的 Python,且随时可以切换环境使用
    • 如果需要一个干净的 Python 环境进行测试,推荐使用 Pipenv,创建虚拟环境的速度非常快,且库依赖不冲突
    • 从公司到家办公,或其他环境迁移的情况,推荐使用 Miniconda 和 Pipenv,它们管理库依赖的能力都很强
  • 针对 Linux 用户
    • 推荐使用 Virtualenv,相比于其他工具还要配置各种环境,它下载即可使用,方便

讲解前须知

我的 Windows 环境和 Linux 环境都只有一个 python 版本

PS:查看本地全部 python 的位置:Windows 用 where python Linux 用 whereis python2whereis python3

# Windows cmd 运行
> python --version
Python 3.9.1
> pip --version
pip 20.3.1 from D:\Software\Miniconda\lib\site-packages\pip (python 3.9)

# Linux bash 运行
$ python3 --version
Python 3.10.4
$ pip --version
pip 22.0.2 from /usr/lib/python3/dist-packages/pip (python 3.10)

一、Venv

venv 在 python 3.3 版本及之后才能使用,且建立的虚拟环境的 python 版本与系统环境一致,不能修改!
如果你的系统含有多个 python 版本,那么可以指定版本建立虚拟环境(如 python3.6 -m ven .\temp_env),不能指定系统中不存在的版本

因为 Windows 中 venv 已经以标准库的形式存在,不用再单独安装
而 Linux 可能会提示 apt install python3.x-venv,运行该命令即可

成功创建后,虚拟环境文件夹包含以下文件:

  • bin【包含 pip、python 等一些可执行环境】
  • include
  • lib【包含 site-packages,用于储存下载的库】
  • lib64
  • pyvenv.cfg【配置文件】
  • Scripts【Windows 特有,用于启动环境和执行命令】
# Windows

# 在当前目录下,创建独立环境(名字为 temp_env)
python -m venv .\temp_env

# 进入环境并启用
cd temp_env & .\Scripts\activate.bat

# 此时左边括号会显示(temp_env),代表成功进入虚拟环境中了

# 在虚拟环境中随意下载库,都不会影响外面的环境
pip install request

# 退出环境
deactivate

# 如果不需要该虚拟环境了,直接手动删除文件夹即可
# Linux

# 在当前目录下,创建独立环境(名字为 temp_env)
python3 -m venv ./temp_env

# 进入环境并启用
cd temp_env && source ./bin/activate

# 此时左边括号会显示(temp_env),代表成功进入虚拟环境中了

# 在虚拟环境中随意下载库,都不会影响外面的环境
pip install request

# 退出环境
deactivate

# 如果不需要该虚拟环境了,直接删除文件夹即可
rm -rf ./temp_env

二、Virtualenv

virtualenv 可以看作是 venv 的增强版,不过早在 venv 出现之前,virtualenv 就算是最受欢迎的命令行环境管理工具了

如果 Linux 提示 sudo apt install python3-virtualenv,运行该命令即可

virtualenv 的特点如下:

  • 依然不能指定本地系统中不存在的 python 版本
  • 相比 venv,它支持 2.x、3.x 的 python 版本
  • 相比 venv,可以选择是否继承父环境的 pip 包(--system-site-packages
# Windows

# 下载 virtualenv
pip install virtualenv

# 在当前目录下,创建独立环境(名字为 temp_env)
# python 版本可以指定本地系统中含有的
virtualenv -p python temp_env
# 如果要继承父环境的 pip 包
virtualenv -p python --system-site-packages temp_env

# 进入环境并启用
cd temp_env & .\Scripts\activate.bat

# 此时左边括号会显示(temp_env),代表成功进入虚拟环境中了

# 在虚拟环境中随意下载库,都不会影响外面的环境
pip install request

# 退出环境
deactivate

# 如果不需要该虚拟环境了,直接手动删除文件夹即可
# Linux

# 下载 virtualenv
pip install virtualenv

# 在当前目录下,创建独立环境(名字为 temp_env)
# python 版本可以指定本地系统中含有的
virtualenv -p python temp_env
# 如果要继承父环境的 pip 包
virtualenv -p python --system-site-packages temp_env

# 进入环境并启用
cd temp_env && source ./bin/activate

# 此时左边括号会显示(temp_env),代表成功进入虚拟环境中了

# 在虚拟环境中随意下载库,都不会影响外面的环境
pip install request

# 退出环境
deactivate

# 如果不需要该虚拟环境了,直接删除文件夹即可
rm -rf ./temp_env

三、Virtualenvwrapper

virtualenvwrapper 又可以看作是 virtualen 的增强版

virtualenvwrapper 的特点如下:

  • 可以对虚拟环境集中管理,即指定虚拟文件夹的存放位置
  • 配置非常麻烦
# Windows

# 下载 virtualenvwrapper,要确保已经安装过了 virtualenv
pip install virtualenv
pip install virtualenvwrapper-win

# 修改虚拟文件夹的存放位置(默认是 C:\Users\Username\Envs)
# 打开“编辑系统环境变量” -> 环境变量 -> 新建系统变量 -> 变量名 WORKON_HOME -> 变量值 D:\XXX(修改的位置)
# 然后重新打开 cmd

# 创建独立环境(名字为 temp_env)并启用
# python 版本可以指定本地系统中含有的
mkvirtualenv --python=python temp_env

# 查看当前的虚拟环境目录(两个命令都行)
lsvirtualenv / workon

# 进入 / 切换虚拟环境
# 此处我另外创建了 temp_env2
workon temp_env2

# 在不同的虚拟环境中进行任意操作,对不会影响其他的虚拟环境和外面的环境,此处就不演示了

# 退出环境
deactivate

# 删除虚拟环境
rmvirtualenv temp_env
# Linux

# 下载 virtualenvwrapper,要确保已经安装过了 virtualenv
pip install virtualenv
pip install virtualenvwrapper

# 先修改相关配置
# 在 ~/.bashrc 或 ~/.zshrc 或其它环境变量相关文件中修改(一般默认是 ~/.bashrc)
nano ~/.bashrc
# 在最后一行添加以下三行内容
# 虚拟文件夹的存放位置(默认是 ~/.virtualenvs),此处我不做修改
export WORKON_HOME=$HOME/.virtualenvs
# 创建工作目录(使用 mkproject 时会用到,但一般用不到)
export PROJECT_HOME=$HOME/workspace
# 指定 python 版本的位置
# 如果不清楚位置的,可以另开一个 bash,输入 whereis python3 命令查看(一般是 /usr/bin/xxx)
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
# 输入完后按 Shift + x,再输入 y,点击回车即可
# 最后保存配置
source ~/.bashrc
# 然后重新打开 bash

# virtualenvwrapper 进行初始化
# 如果不清楚位置的,可以另开一个 bash,输入 whereis virtualenvwrapper.sh 命令查看(一般是 /usr/local/xxx)
source /usr/local/bin/virtualenvwrapper.sh

# 创建独立环境(名字为 temp_env)并启用
# python 版本可以指定本地系统中含有的
mkvirtualenv --python=python3 temp_env

# 查看当前的虚拟环境目录(两个命令都行)
lsvirtualenv / workon

# 进入 / 切换虚拟环境
# 此处我另外创建了 temp_env2
workon temp_env2

# 在不同的虚拟环境中进行任意操作,对不会影响其他的虚拟环境和外面的环境,此处就不演示了

# 退出环境
deactivate

# 删除虚拟环境
rmvirtualenv temp_env

四、Virtualenv-burrito

官方描述:使用单行命令拥有 virtualenv + virtualenvwrapper 的环境

virtualenv-burrito 的特定如下:

  • 仅适用于 python 2.x
  • 省去了配置 virtualenvwrapper 的琐碎流程
  • 具体使用方法和 virtualenvwrapper 类似
  • 使用命令 virtualenv-burrito upgrade 一键更新 virtualenv + virtualenvwrapper

五、Pipenv

Pipenv 集成了 pip,virtualenv 两者的功能,且完善了两者的一些缺陷

pipenv 的特点如下:

  • 一般环境生成的 requirements.txt 文件可能存在问题,而 pipenv 使用了 Pipfile 和 Pipfile.lock 确保了稳健性
  • 只能创建唯一的虚拟环境,更适用于一次性测试
  • 无需配置,命令简明,更易于记忆
  • 各个地方使用了哈希校验,不仅安全,且会自动公开安全漏洞
# Windows

# 下载 pipenv
# 全局安装,如果只想在当前用户模式下安装,可添加参数 --user
pip install pipenv

# 创建虚拟环境
# 默认创建位置是 .\Envs\Temporary-xxx
# python 版本可以指定本地系统中含有的
pipenv --two  # 使用当前系统中的 Python2 创建环境
pipenv --three  # 使用当前系统中的 Python3 创建环境
pipenv --python 3  # 指定使用 Python3 创建环境
pipenv --python 3.6  # 指定使用 Python3.6 创建环境
pipenv --python 2.7.14  # 指定使用 Python2.7.14 创建环境

# 激活虚拟环境
pipenv shell

# 使用 python 运行文件
python xxx.py

# 退出虚拟环境
exit

# 删除虚拟环境
pipenv --rm


# 常用命令
pipenv --where  # 显示目录信息
pipenv --venv  # 显示虚拟环境信息
pipenv --py  # 显示 Python 解释器信息
pipenv install XXX  # 安装 XXX 模块并加入到 Pipfile
pipenv install XXX==1.11  # 安装固定版本的 XXX 模块并加入到 Pipfile
pipenv graph  # 查看目前安装的库及其依赖
pipenv check  # 检查安全漏洞
pipenv update --outdated  # 查看所有需要更新的依赖项
pipenv update  # 更新所有包的依赖项
pipenv update <包名>  # 更新指定的包的依赖项
pipenv uninstall XXX  # 卸载 XXX 模块并从 Pipfile 中移除
pipenv uninstall --all  # 卸载全部包并从 Pipfile 中移除
pipenv uninstall --all-dev  # 卸载全部开发包并从 Pipfile 中移除
pipenv lock -r > requirements.txt  # 将 Pipfile 和 Pipfile.lock 文件里面的包导出为 requirements.txt 文件
pipenv lock -r --dev > requirements.txt  # 将 Pipfile 和 Pipfile.lock 文件里面的开发包导出为 requirements.txt 文件
pipenv install -r requirements.txt
pipenv install -r --dev requirements.txt  # 只安装开发包

六、Pipx

pipx 相比于前面介绍的,属于是非常轻量级工具了
但它仅适用于可直接运行的应用程序,而不是专门为 python 服务的

pipx 的特点如下:

  • 能够直接在临时虚拟环境中运行应用程序(如 pipx run pycowsay moo
  • 运行非常容易报错(或许只有我是这样)
  • Windows 用户的默认下载位置为 C:\Users\Username\.local\pipx\venvs
  • Linux 用户的默认下载位置为 /home/ubuntu/.local/pipx/venvs
# Windows / Linux

# 下载 pipx
pip install pipx
pipx ensurepath
# 然后重新打开 cmd / bash

pipx list # 查看所有已安装的应用
pipx install <pkn> # 下载特定应用
pipx uninstall <pkn> # 卸载特定应用
pipx upgrade <pkn> # 更新特定应用
pipx upgrade-all # 更新全部应用
pipx run pycowsay moooo # 直接运行某个库,不用下载
pipx run <website>.<pyn>.py # 直接运行网站上的 py 文件

七、Autoenv

官方描述:当您 cd 进入一个包含 .env 的目录中,就会 autoenv 自动激活那个环境

autoenv 的特点如下:

  • 进入文件夹,自动启动虚拟环境;退出文件夹,自动退出虚拟环境
  • 类似的项目还有 direnv

八、Anaconda / Miniconda

官方描述:Anaconda 是一个用于科学计算的 Python 发行版(但主要使用它管理 python 版本的功能)
Miniconda 是一个 Anaconda 的轻量级替代,默认只包含了 python 和 conda,但是可以通过 pip 和 conda 来安装所需要的包

anaconda / miniconda 的特点如下:

  • 相比于上面全部的虚拟环境管理工具,这是唯一一个能创建本地系统不存在 python 版本的工具,即任意版本都能使用
  • anaconda 体积巨大,推荐使用 mimiconda
  • 操作方便,功能强大(支持环境迁移)

PS:软件下载与换源,参考清华大学开源软件镜像站的步骤,此处不做讲解

# Windows

# ----------- 使用 conda 创建 python 虚拟环境 -----------
# 使用的 python 版本 = 3.6 并命名环境名为 data
conda create -n data python=3.6
# 下载所需 python 库
# conda install -n data package_name
conda install -n data numpy
conda install -n data matplotlib==3.3.1
# 进入环境
conda activate data
# 清除缓存
# conda clean -i
# 卸载已有 python 库
# conda uninstall -n data package_name
# 更新已有 python 库
# conda upgrade -n data package_name

# ----------- 使用 conda 进行虚拟环境的调整 -----------
# 查看当前环境
conda info
# 查看全部环境
conda info --envs
# 检查并更新当前 conda
conda update conda
# 进入旧环境
conda activate old_name
# 克隆旧环境
conda create -n new_name --clone old_name
# 退出旧环境
conda deactivate
# 删除旧环境(最后记得删除旧环境的文件夹)
conda remove -n old_name --all

Reference

参考文章:廖雪峰【venv】
参考文章:Pipenv & 虚拟环境
参考文章:python多环境管理(venv与virtualenv)
参考文章:一文解读 virtualenv & venv & pipenv 之间的联系与区别
参考文章:Virtualenvwrapper使用和配置默认创建环境的路径(win10)
参考文章:pipenv 入门教程
参考文章:Pipx:在隔离环境中安装和运行 Python 应用
参考文章:Windows Terminal
参考文章:清华大学开源软件镜像站

你可能感兴趣的:(其他,python,linux)