pipenv简介

过去我们一般用 virtualenv搭建虚拟环境,管理python版本,用 pip进行包的管理。

在虚拟环境激活状态下,可以安装所需的依赖包,安装的依赖包会保存至项目虚拟环境目录下,不会污染系统全局环境

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

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

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

pipenv主要有以下特性:

  • pipenv集成了pipvirtualenv两者的功能,且完善了两者的一些缺陷。

  • pipenv会在项目目录下创建 Pipfile Pipfile.lock 文件,管理包之间的依赖关系。

    virtualenv需要将虚拟环境依赖包的导出为requirements.txt, 一旦依赖包变动,就要重新导出,现在PipfilePipfile.lock文件可以节省这些步骤,更方便地管理,查看依赖关系是十分方便。

  • 各个地方使用了哈希校验,无论安装还是卸载包都十分安全,且会自动公开安全漏洞。。

  • 通过加载 .env文件简化开发工作流程。

  • 便于docker容器化管理Pipfile文件支持生成 requirements文件,便于项目代码docker化管理,另外,pipfile还支持v–dev环境,可以在调试阶段安装许多调试工具等,而不影响生产环境的环境。

  • 无需激活虚拟环境执行代码,只要有pipfile文件即可使用虚拟环境的依赖包执行python脚本,如:通过执行命令 pipenv run python xx.py

  • 支持Python2 和 Python3,在各个平台的命令都是一样的。

下面快速介绍pipenv的基本使用,本文的使用的是windows下的Python3.7,对于其他平台同样适用。

pipenv安装

快捷键Win+R,输入cmd打开黑屏终端,输入代码

pip3 install pipenv

检测是否安装成功

pipenv --version

查看帮助指令

pipenv --help

创建虚拟环境

使用命令pipenv install,可在当前目录下创建 PipfilePipfile.lock 文件,在虚拟环境目录下新增一个虚拟环境

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 文件可以复制到其他项目内,通过执行pipenv install命令, 根据这个 Pipfile 文件生成虚拟环境和依赖包的安装

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

默认路径存放虚拟环境

进入F盘下的 Project目录下,使用mkdir命令新增一个 Pro1文件夹,执行pipenv install命令

在这里插入图片描述

提示虚拟环境创建成功,进入F盘下的 Project/ Pro1目录下,可以发现该文件夹下新增了 PipfilePipfile.lock 文件

而虚拟环境创建的目录,则是位于C盘下,进入C:\Users\bobo\.virtualenvs目录下,可以发现目录下新增了一个 Pro1-sCuF4Q6F,该文件夹中的内容则是F盘 Project目录下Pro1项目对应的虚拟环境

指定目录存放虚拟环境

如果不想将虚拟环境的安装目录放到C盘,也可以指定目录存放

鼠标右击桌面此电脑,点击属性,点开高级系统设置,点击环境变量

在这里插入图片描述

新增一个环境变量,可以选择用户变量,也可以选择系统变量

在这里插入图片描述

变量名为WORKON_HOME,变量值则为虚拟环境的安装目录。(注意:新增后一定要一步步点击确定来关闭弹框,否则没有保存成功,会导致没有生效)

新打开一个黑屏终端界面,进入F盘下的 Project目录下,使用mkdir命令新增一个 Pro2文件夹,执行pipenv install命令

在这里插入图片描述

可以看到,Pro2项目对应的虚拟环境的安装目录,变成了F:\Envs\Pro2-lXQWMpIi

创建虚拟环境时指定当前项目路径存放

指定目录存放虚拟环境,便于统一管理所有的虚拟环境。

但如果想创建项目的时候就创建虚拟环境,且将虚拟环境放到项目路径下,也是可以做到的(将上一步中变量名为WORKON_HOME这一变量删去,否则会产生冲突)

新增一个环境变量,变量名为PIPENV_VENV_IN_PROJECT,值为 1
请添加图片描述

新打开一个黑屏终端界面,进入E盘下Envs目录下,执行pipenv install命令
请添加图片描述

这样,在创建虚拟环境时,就会在当前目录生成一个 .venv 文件夹,然后在该文件夹下安装虚拟环境
与上一种方式相比,这种方式的优点在于更方便管理单个项目的包依赖,不容易与其他项目的虚拟环境搞混

指定python版本创建虚拟环境

使用命令pipenv install --python +版本号,可指定python版本创建虚拟环境

博主本地python默认的是3.7版本,但还安装了python3.10版本
在这里插入图片描述

指定3.10版本进行安装,pipenv会自动去寻找python安装的目录,然后根据python.exe文件去创建虚拟环境

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

pipenv install --two           创建指定python2.x版本的虚拟环境
pipenv install --three         创建指定python3.x版本的虚拟环境

安装第三方库

pipenv兼容pip命令,同样使用 pipenv install + 包名的方式安装第三方库

使用pycharm打开 Pro2文件夹,可以发现默认加载了Pro2对应的虚拟环境

新建一个demo文件,此时Pro2对应的虚拟环境并没有安装 requests库,所以这里报错了

在这里插入图片描述

在pycharm的 Terminal终端输入命令

pipenv install requests

安装成功后,代码里就不会再报错了

若需要指定版本按钮,在命令尾部加上包的版本即可

pipenv install requests==2.31
修改镜像源

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

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

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

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

安装到dev环境

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

比如单元测试相关的包unittestpytest,只在开发阶段有用,为了和生产环境的包区分开来,可以通过命令 pipenv install --dev + 包名将其归类到【dev-packages】下。

例如安装pytest到开发环境

pipenv install --dev pytest

pipenv命令

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

卸载命令
pipenv uninstall requests 			在项目所在虚拟环境中卸载requests包,并在Pipfile文件移除包名
pipenv uninstall --all 				在项目所在虚拟环境中卸载所有包,并在Pipfile文件移除包名
pipenv uninstall --all --dev		在项目所在虚拟环境中卸载所有dev环境的包,并在Pipfile文件移除[dev-packages]中的所有包名
更新命令
pipenv update requests 			在项目所在虚拟环境中更新requests包,并在Pipfile.lock文件中更新相应版本信息
pipenv update 	 				在项目所在虚拟环境中更新所有包,并在Pipfile.lock文件中更新相应版本信息
pipenv update --outdated		在项目所在虚拟环境中查看已过期的包的信息
pipenv lock						根据项目所在虚拟环境的Pipfile文件生成/更新Pipfile.lock文件中的依赖包信息
查看命令
pipenv --where			查看项目位置
pipenv --venv			查看虚拟环境位置
pipenv --py				查看虚拟环境python解释器位置
pipenv graph			查看依赖包信息
激活与退出虚拟环境

使用pipenv install 命令创建虚拟环境时,创建成功会默认激活虚拟环境

若想退出虚拟环境,可输入 exit 退出(仅适用于黑屏终端,pycharm默认打开项目就加载了虚拟环境,只能修改指定的虚拟环境)

目录下存在 PipfilePipfile.lock 文件,已创建过虚拟环境,可通过命令 pipenv shell进行激活

删除虚拟环境

快捷键Win+R,输入cmd打开黑屏终端,输入代码

pipenv --rm

注意:该命令无法在pycharm的Terminal终端执行成功,使用pycharm打开项目时,默认激活了项目下的虚拟环境,而使用exit命令退出虚拟环境,pycharm会关闭当前的Terminal终端

删除虚拟环境后,如果目录下仍存在 PipfilePipfile.lock 文件,可以通过pipenv install重新进行安装虚拟环境,且重新安装的虚拟环境,名称与删除前一致

运行python代码
虚拟环境已激活

在虚拟环境已激活的情况下,可直接执行python代码,例如执行demo文件中的 test.py 文件

python test.py

控制台会返回post请求的结果

再比如运行Django项目

python manage.py runserver 0.0.0.0:8080

此时,在浏览器中输入url http://127.0.0.1:8080/,可以看到项目已启动

虚拟环境未激活

不进入虚拟环境的情况下,也可以通过pipenv命令使用虚拟环境运行代码,使用pipenv run python xxx.py命令,执行python文件

pipenv run python test.py

黑屏终端返回post请求的结果

再比如运行Django项目( scripts中已添加自定义的脚本命令)

pipenv run django

此时,在浏览器中输入url http://127.0.0.1:8080/,可以看到项目已启动

在这里插入图片描述

requirements.txt 文件

pipenv可以像virtualenv一样使用命令生成requirements.txt文件

pipenv requirements > requirements.txt

pipenv还可以通过requirements.txt文件 安装依赖包

pipenv install -r requirement.txt
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐