Python虚拟环境(一)https://developer.aliyun.com/article/1480612
pipenv
简介
过去我们一般用 virtualenv 搭建虚拟环境,管理 Python版本,用 pip 进行包的管理。在虚拟环境激活状态下,可以安装所需的依赖包,安装的依赖包会保存至项目虚拟环境目录下,不会污染系统全局环境。
virtualenv 的使用存在一定的问题:
- 由于跨平台的使用不太一致,有时候处理包之间的依赖总存在问题
- 可能需要手动安装/删除某些特定版本的包
- 存在多个环境(开发环境、测试环境、生产环境)时,依赖包目录文件 requirements.txt 会需要存在多个,无比繁琐
- 要定期更新 requirements.txt,保持项目环境的一致性
pipenv 能够有效管理 Python 多个环境,各种包,相当于 virtualenv 和 pip 的合体,且更加强大。pipenv 主要有以下特性:
- pipenv 集成了 pip、virtualenv 两者的功能,且完善了两者的一些缺陷
- pipenv 会在项目目录下创建 Pipfile、Pipfile.lock 文件,管理包之间的依赖关系
- virtualenv 需要将虚拟环境依赖包的导出为 requirements.txt,一旦依赖包变动,就要重新导出,现在 Pipfile 和 Pipfile.lock 文件可以节省这些步骤,更方便地管理,查看依赖关系是十分方便
- 各个地方使用了哈希校验,无论安装还是卸载包都十分安全,且会自动公开安全漏洞。通过加载 .env 文件简化开发工作流程
- 便于 docker 容器化管理,Pipfile 文件支持生成 requirements 文件,便于项目代码 docker 化管理,另外,pipfile 还支持 v–dev 环境,可以在调试阶安装许多调试工具等,而不影响生产环境的环境
- 无需激活虚拟环境执行代码,只要有 pipfile 文件即可使用虚拟环境的依赖包执行 Python 脚本,如:通过执行命令
pipenv run python xx.py
- 支持 Python2 和 Python3,在各个平台的命令都是一样的
安装
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"
- source 用来设置仓库地址,即指定镜像源下载虚拟环境所需要的包
- packages 用来指定项目依赖的包,可以用于生产环境和生成 requirements 文件
- dev-packages 用来指定开发环境需要的包,这类包只用于开发过程,不用与生产环境
- requires 指定目标 Python 版本
- scripts 添加自定义的脚本命令,并通过
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
简介
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 的安装包进行手动安装。
Python虚拟环境(三)https://developer.aliyun.com/article/1480614