Python 虚拟环境是一种机制,它允许开发人员在同一台机器上使用不同的Python版本和库。在 Python 虚拟环境中,可以独立地安装和管理 Python 软件包,而不会影响系统范围内的 Python 安装或其他虚拟环境。
通过创建虚拟环境,可以:
Python 虚拟环境通常是使用第三方工具,如 virtualenv 或 conda 创建的。这些工具提供了一个简单的方法来创建、激活和退出虚拟环境,并且可以与大多数主流的 Python 开发工具集成。
在开发 Python 应用环境的时候,系统只会提供一个 Python 环境,所有的第三方的 Python 库都会安装到系统中 Python 的 site-packages 目录之下,这样同时开发多个应用程序的时候,这些应用程序会共同使用一个 Python 环境。virtualenv 是一个用于创建 Python 虚拟环境的一个工具,在使用过程中 virtualenv 会独立创建一个 Python 环境,使得能够和操作系统中的 Python 环境隔离开。
它不仅同时支持 Python2 和 Python3,而且可以为每个虚拟环境指定 Python 解释器,并选择不继承基础版本的包。
使用 pip 安装 virtualenv 环境
pip install virtualenv
pip3 install virtualenv
在 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 环境名
source 环境名/bin/activate
在 Windows 系统激活虚拟环境
环境名\Script\activate.bat
pip install package_name
pip3 install package_name
deactivate
进入到虚拟环境所在目录,之后执行 Linux 删除命令即可。如果是 Windows 系统,则可以直接删除文件夹。
rm -rf 环境名
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]
进入 bin
目录,Linux/Mac用 source activate
,Windows用 activate.bat
激活该venv环境
source 环境名/bin/activate
在 Windows 系统激活虚拟环境
环境名\Script\activate.bat
pip install package_name
pip3 install package_name
deactivate
进入到虚拟环境所在目录,之后执行 Linux 删除命令即可。如果是 Windows 系统,则可以直接删除文件夹。
rm -rf 环境名
过去我们一般用 virtualenv 搭建虚拟环境,管理 Python版本,用 pip 进行包的管理。在虚拟环境激活状态下,可以安装所需的依赖包,安装的依赖包会保存至项目虚拟环境目录下,不会污染系统全局环境。
virtualenv 的使用存在一定的问题:
pipenv 能够有效管理 Python 多个环境,各种包,相当于 virtualenv 和 pip 的合体,且更加强大。pipenv 主要有以下特性:
pipenv run python xx.py
pip install pipenv
pip3 install pipenv
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
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"
pipenv run + 名称
的方式在虚拟环境中执行对应的命令pipenv run django
相当于 执行命令 pipenv run python manage.py runserver 0.0.0.0:8080
Pipfile.lock文件:通过hash算法将包的名称和版本,及依赖关系生成哈希值,保证包的完整性,除修改镜像源,非必要情况不对该文件进行修改。
pipenv shell
# 安装最新版本库
pipenv install package_name
# 安装指定版本库
pipenv install package_name==版本
安装到 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
pipenv --rm
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 --version
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 镜像的大学:
conda config --show channels
conda config --remove channels 镜像源URL
conda update conda
conda env list
conda info --envs
conda create --name 环境名 python=3.8
conda create --name 新环境名 --clone 克隆目标环境名
# Linux
conda activate 环境名
# Windows
activate 环境名
# 使用 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
conda remove -n 环境名 --all