过去我们一般用 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,在各个平台的命令都是一样的。
下面快速介绍pipenv的基本使用,本文的使用的是windows下的Python3.7,对于其他平台同样适用。
快捷键Win+R,输入cmd打开黑屏终端,输入代码
pip3 install pipenv
检测是否安装成功
pipenv --version
查看帮助指令
pipenv --help
使用命令pipenv install,可在当前目录下创建 Pipfile 、 Pipfile.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目录下,可以发现该文件夹下新增了 Pipfile 和 Pipfile.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
使用命令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
若想要永久该虚拟环境的镜像源,则需要打开项目目录下的Pipfile 、 Pipfile.lock 文件,将source栏 url = "https://pypi.org/simple"链接内容修改为需要的镜像源,例如修改为清华的镜像源url = "https://pypi.tuna.tsinghua.edu.cn/simple"
安装调试工具、性能测试工具、python语法工具,这些内容仅在本地环境有用,生产环境不需要这些。
比如单元测试相关的包unittest、pytest,只在开发阶段有用,为了和生产环境的包区分开来,可以通过命令 pipenv install --dev + 包名将其归类到【dev-packages】下。
例如安装pytest到开发环境
pipenv install --dev pytest
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默认打开项目就加载了虚拟环境,只能修改指定的虚拟环境)
目录下存在 Pipfile 、 Pipfile.lock 文件,已创建过虚拟环境,可通过命令 pipenv shell进行激活
快捷键Win+R,输入cmd打开黑屏终端,输入代码
pipenv --rm
注意:该命令无法在pycharm的Terminal终端执行成功,使用pycharm打开项目时,默认激活了项目下的虚拟环境,而使用exit命令退出虚拟环境,pycharm会关闭当前的Terminal终端
删除虚拟环境后,如果目录下仍存在 Pipfile 、 Pipfile.lock 文件,可以通过pipenv install重新进行安装虚拟环境,且重新安装的虚拟环境,名称与删除前一致
在虚拟环境已激活的情况下,可直接执行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中已添加自定义的脚本命令)
python run django
此时,在浏览器中输入url http://127.0.0.1:8080/,可以看到项目已启动

pipenv可以像virtualenv一样使用命令生成requirements.txt文件
pipenv lock -r --dev >requirement.txt
命令中的--dev并不是说把 Pipfile文件中 [dev-packages]下的包导出,而是把所有依赖包导出。
pipenv还可以通过requirements.txt文件 安装依赖包
pipenv install -r requirement.txt