Python虚拟环境

什么是虚拟环境

Python 虚拟环境是一种机制,它允许开发人员在同一台机器上使用不同的Python版本和库。在 Python 虚拟环境中,可以独立地安装和管理 Python 软件包,而不会影响系统范围内的 Python 安装或其他虚拟环境。

通过创建虚拟环境,可以:

  • 避免在多个项目之间出现冲突的依赖关系
  • 在没有管理员权限的情况下安装软件包
  • 更轻松地分享项目和环境配置

Python 虚拟环境通常是使用第三方工具,如 virtualenv 或 conda 创建的。这些工具提供了一个简单的方法来创建、激活和退出虚拟环境,并且可以与大多数主流的 Python 开发工具集成。

常用的虚拟环境工具

virtualenv

简介

在开发 Python 应用环境的时候,系统只会提供一个 Python 环境,所有的第三方的 Python 库都会安装到系统中 Python 的 site-packages 目录之下,这样同时开发多个应用程序的时候,这些应用程序会共同使用一个 Python 环境。virtualenv 是一个用于创建 Python 虚拟环境的一个工具,在使用过程中 virtualenv 会独立创建一个 Python 环境,使得能够和操作系统中的 Python 环境隔离开。

它不仅同时支持 Python2 和 Python3,而且可以为每个虚拟环境指定 Python 解释器,并选择不继承基础版本的包。

安装

使用 pip 安装 virtualenv 环境

pip install virtualenv
pip3 install virtualenv

Python虚拟环境_第1张图片

在 Ubuntu 上安装 virtualenv

sudo apt update
# for Python3
sudo apt install python3-virtualenv
# for Python2
sudo apt install python-virtualenv
用法
创建虚拟环境

创建 virtualenv 虚拟环境后,activate 等脚本文件会自动安装到你的虚拟环境文件夹中。

virtualenv 环境名
# 指定 Python 版本
virtualenv -p /usr/bin/python2.7 环境名
virtualenv -p /usr/bin/python3 环境名

Python虚拟环境_第2张图片

激活虚拟环境
source 环境名/bin/activate

Python虚拟环境_第3张图片

在 Windows 系统激活虚拟环境 环境名\Script\activate.bat

在虚拟环境中安装库
pip install package_name
pip3 install package_name

Python虚拟环境_第4张图片

退出虚拟环境
deactivate

Python虚拟环境_第5张图片

删除虚拟环境

进入到虚拟环境所在目录,之后执行 Linux 删除命令即可。如果是 Windows 系统,则可以直接删除文件夹。

rm -rf 环境名

venv

简介

Python 从 3.3 版本开始,自带了一个虚拟环境模块 venv,venv 是 Python 标准库中的一个模块,它提供了一种轻量级的虚拟环境管理方式。使用 venv 可以创建独立的 Python 环境,每个环境都有自己的 Python 解释器和第三方库,互相之间不会干扰。这样做的好处是可以在同一台机器上同时开发多个项目,每个项目使用自己所需的 Python 版本和依赖库。

通过 venv 创建的虚拟环境是基于当前系统安装的 Python 解释器而创建的,因此不需要额外安装其他软件,只需要执行简单的命令即可。使用 venv 创建虚拟环境的过程中,也可以选择是否包含系统已经安装的第三方库,以及是否将新的虚拟环境添加到系统环境变量中。

venv 模块是在 Python 3.3 版本中引入的,用于创建虚拟环境。在此之前,Python 社区使用 virtualenv 工具来管理虚拟环境。不过,在 Python 3.3 之后,使用 venv 模块就可以在标准库中方便地创建和管理虚拟环境了,因此 virtualenv 库也逐渐被取代。

用法
创建虚拟环境
python -m venv 环境名 [--system-site-packages 是否包含 Python 系统的 site-packages]
# 指定 Python3 版本(3.3之后)
python3.x -m venv 环境名 [--system-site-packages 是否包含 Python 系统的 site-packages]

Python虚拟环境_第6张图片

激活虚拟环境

进入 bin 目录,Linux/Mac用 source activate,Windows用 activate.bat 激活该venv环境

source 环境名/bin/activate

Python虚拟环境_第7张图片

在 Windows 系统激活虚拟环境 环境名\Script\activate.bat

在虚拟环境中安装库
pip install package_name
pip3 install package_name

Python虚拟环境_第8张图片

退出虚拟环境
deactivate

image-20230530232528041

删除虚拟环境

进入到虚拟环境所在目录,之后执行 Linux 删除命令即可。如果是 Windows 系统,则可以直接删除文件夹。

rm -rf 环境名

pipenv

简介

过去我们一般用 virtualenv 搭建虚拟环境,管理 Python版本,用 pip 进行包的管理。在虚拟环境激活状态下,可以安装所需的依赖包,安装的依赖包会保存至项目虚拟环境目录下,不会污染系统全局环境。

virtualenv 的使用存在一定的问题:

  1. 由于跨平台的使用不太一致,有时候处理包之间的依赖总存在问题
  2. 可能需要手动安装/删除某些特定版本的包
  3. 存在多个环境(开发环境、测试环境、生产环境)时,依赖包目录文件 requirements.txt 会需要存在多个,无比繁琐
  4. 要定期更新 requirements.txt,保持项目环境的一致性

pipenv 能够有效管理 Python 多个环境,各种包,相当于 virtualenv 和 pip 的合体,且更加强大。pipenv 主要有以下特性:

  1. pipenv 集成了 pip、virtualenv 两者的功能,且完善了两者的一些缺陷
  2. pipenv 会在项目目录下创建 Pipfile、Pipfile.lock 文件,管理包之间的依赖关系
  3. virtualenv 需要将虚拟环境依赖包的导出为 requirements.txt,一旦依赖包变动,就要重新导出,现在 Pipfile 和 Pipfile.lock 文件可以节省这些步骤,更方便地管理,查看依赖关系是十分方便
  4. 各个地方使用了哈希校验,无论安装还是卸载包都十分安全,且会自动公开安全漏洞。通过加载 .env 文件简化开发工作流程
  5. 便于 docker 容器化管理,Pipfile 文件支持生成 requirements 文件,便于项目代码 docker 化管理,另外,pipfile 还支持 v–dev 环境,可以在调试阶安装许多调试工具等,而不影响生产环境的环境
  6. 无需激活虚拟环境执行代码,只要有 pipfile 文件即可使用虚拟环境的依赖包执行 Python 脚本,如:通过执行命令 pipenv run python xx.py
  7. 支持 Python2 和 Python3,在各个平台的命令都是一样的
安装
pip install pipenv
pip3 install pipenv

Python虚拟环境_第9张图片

用法
创建虚拟环境
pipenv install [--python 3.8 指定Python版本创建虚拟环境]

Windows 系统下,基本安装的都是 Python3.x 版本;而有些 Linux 系统自带 Python2.x 和 Python3.x 版本,Linux 下需要指定默认的 Python 版本,需使用下方的命令:

# 创建指定 Python2.x 版本的虚拟环境
pipenv install --two
# 创建指定 Python3.x 版本的虚拟环境
pipenv install --three

Python虚拟环境_第10张图片

Pipfile 文件:用于保存项目的 Python 版本、依赖包等相关信息。

[[source]]
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
verify_ssl = true
name = "pypi"

[packages]
requests = "*"
pyyaml = "*"
Django = "*"

[dev-packages]
pytest = "*"

[requires]
python_version = "3.7"

[scripts]
django = "python manage.py runserver 0.0.0.0:8080"
  1. source 用来设置仓库地址,即指定镜像源下载虚拟环境所需要的包
  2. packages 用来指定项目依赖的包,可以用于生产环境和生成 requirements 文件
  3. dev-packages 用来指定开发环境需要的包,这类包只用于开发过程,不用与生产环境
  4. requires 指定目标 Python 版本
  5. scripts 添加自定义的脚本命令,并通过 pipenv run + 名称 的方式在虚拟环境中执行对应的命令

pipenv run django 相当于 执行命令 pipenv run python manage.py runserver 0.0.0.0:8080

Pipfile.lock文件:通过hash算法将包的名称和版本,及依赖关系生成哈希值,保证包的完整性,除修改镜像源,非必要情况不对该文件进行修改。

激活虚拟环境
pipenv shell

image-20230530234702427

在虚拟环境中安装库
# 安装最新版本库
pipenv install package_name
# 安装指定版本库
pipenv install package_name==版本

Python虚拟环境_第11张图片

安装到 dev 环境

安装调试工具、性能测试工具、Python 语法工具,这些内容仅在本地环境有用,生产环境不需要这些。

pipenv install --dev package_name

通过上面的命令可以将指定的库安装在 dev-packages 下。

配置加速源

如果官方源站安装第三方库的速度很慢,安装失败,可以修改镜像源:

pipenv 兼容 pip 命令,所以也可以在命令加上参数 -i

pipenv install package_name -i https://pypi.tuna.tsinghua.edu.cn/simple

若想要永久该虚拟环境的镜像源,则需要打开项目目录下的 Pipfile、Pipfile.lock 文件,将 source 栏 url = "https://pypi.org/simple" 链接内容修改为需要的镜像源,例如修改为清华的镜像源 url = "https://pypi.tuna.tsinghua.edu.cn/simple"

在虚拟环境中卸载库

pipenv 兼容大部分的 pip命令,所以 pip 命令能实现的内容,也能通过 pipenv 命令实现。

# 在项目所在虚拟环境中卸载指定库,并在 Pipfile 文件移除包名
pipenv uninstall package_name
# 在项目所在虚拟环境中卸载所有包,并在 Pipfile 文件移除包名
pipenv uninstall --all
# 在项目所在虚拟环境中卸载所有 dev 环境的包,并在 Pipfile 文件移除 [dev-packages] 中的所有包名
pipenv uninstall --all --dev
在虚拟环境中更新库
# 在项目所在虚拟环境中更新指定库,并在 Pipfile.lock 文件中更新相应版本信息
pipenv update package_name
# 在项目所在虚拟环境中更新所有包,并在 Pipfile.lock 文件中更新相应版本信息
pipenv update
# 在项目所在虚拟环境中查看已过期的包的信息
pipenv update --outdated
# 根据项目所在虚拟环境的 Pipfile 文件生成/更新 Pipfile.lock 文件中的依赖包信息
pipenv lock

退出虚拟环境
exit

image-20230530235939027

删除虚拟环境
pipenv --rm

Python虚拟环境_第12张图片

conda

简介

conda 是一个开源的跨平台软件包管理系统和环境管理系统,用于安装、运行和协调不同版本的软件包和其依赖项。它最初是为 Python 语言而设计的,但现在已经支持多种编程语言和工具。conda 可以轻松地创建和使用虚拟环境,这些环境可以独立于系统上的其他环境和安装的软件包运行。conda 还有一个广泛的软件包仓库,其中包含许多科学计算、数据分析和机器学习软件包,可供用户直接安装和使用。

conda 支持 Python、R、Java、JavaScript、C 等多种开发语言的包、依赖和环境管理工具,能运行在 Windows、MacOS、Linux 多个平台,可以在本地轻松创建、保存、切换环境。当安装 anaconda 时,会自动安装 conda 工具。

conda 与 pipenv,venv 等虚拟环境管理工具的最大的不同在于:conda 虚拟环境是独立于操作系统解释器环境的,即无论操作系统解释器什么版本(哪怕 2.7),我也可以指定虚拟环境 python 版本为 3.6,而 venv 是依赖主环境的。

conda 、miniconda 和 anaconda 的关系

conda 、miniconda 和 anaconda 都是由 Continuum Analytics 发布的 Python 包管理器。

conda 是一个跨平台的包管理器和环境管理器,可以用于安装、升级和卸载软件包,以及创建和管理多个 Python 环境。

miniconda 是一个轻量级版本的 anaconda ,它只包含了最基本的依赖项和 conda ,可以根据需要自行安装其他软件包和依赖项。

而 anaconda 则是一个大型的 Python 生态系统,包括了 Python 解释器、conda 、一系列常用的科学计算、数据处理和机器学习库以及集成开发环境(如 Jupyter Notebook)等工具。与 miniconda 相比,anaconda 的安装包更大,但是包含了更多的软件包和依赖项。

因此,可以认为 miniconda 是 anaconda 的一个子集,而 conda 是这两者的共同核心组件。

安装

conda 的安装方式有两种,一种是通过安装 anaconda 或 miniconda 来自动安装 conda;另一种是直接下载 conda 的安装包进行手动安装。

  • 安装_Anaconda 中文网
  • (48条消息) 「详解」conda 安装与使用_conda安装_ViatorSun的博客-CSDN博客
  • conda的安装与使用 2.0版(2022-08-12更新) - 简书 (jianshu.com)
用法
查看conda版本
conda --version

Python虚拟环境_第13张图片

配置镜像源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/
conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/cloud/bioconda/
conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/pkgs/main/

目前国内提供 conda 镜像的大学:

  • 清华大学:https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/
  • 北京外国语大学:https://mirrors.bfsu.edu.cn/help/anaconda/
  • 南京邮电大学:https://mirrors.njupt.edu.cn/
  • 南京大学:http://mirrors.nju.edu.cn/
  • 重庆邮电大学:http://mirror.cqupt.edu.cn/
  • 上海交通大学:https://mirror.sjtu.edu.cn/
  • 哈尔滨工业大学:http://mirrors.hit.edu.cn/#/home
查看已配置的镜像源
conda config --show channels

Python虚拟环境_第14张图片

删除镜像源
conda config --remove channels 镜像源URL

Python虚拟环境_第15张图片

升级conda
conda update conda
查看所有环境
conda env list
conda info --envs

Python虚拟环境_第16张图片

创建虚拟环境
conda create --name 环境名 python=3.8
克隆虚拟环境
conda create --name 新环境名 --clone 克隆目标环境名
激活虚拟环境
# Linux
conda activate 环境名
# Windows
activate 环境名

Python虚拟环境_第17张图片

在虚拟环境中安装库
# 使用 pip 安装库
pip install package_name
pip install package_name==版本号
# 使用 conda 安装库
conda install package_name
conda install package_name=版本号

注意:安装特定版本的包,conda用 =, pip用 ==

尽管在 anaconda 下我们可以很方便的使用 conda install 来安装我们需要的依赖,但是 anaconda 本身只提供部分包,远没有 pip 提供的包多,有时 conda 无法安装我们需要的包,我们需要用 pip 将其装到 conda 环境里。

在虚拟环境中查找库
conda search package_name
在虚拟环境中更新库
# 更新指定库
conda update package_name
pip install --upgrade package_name
# 更新全部库
conda update --all
在虚拟环境中卸载库
# 使用 pip 卸载
pip uninstall package_name [-y 可选,表示直接确认]
# 使用 conda 卸载
conda remove package_name
查看已安装库
# 使用 pip 查看
pip list
# 使用 conda 查看
conda list
conda list -n 环境名
退出虚拟环境
deactivate
conda deactivate
conda.bat deactivate

Python虚拟环境_第18张图片

删除虚拟环境
conda remove -n 环境名 --all

Python虚拟环境_第19张图片

你可能感兴趣的:(Python,Python,虚拟环境,virtualenv,venv,pipenv,conda)