Pipenv
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,在各个平台的命令都是一样的。
下面快速介绍pipenv
的基本使用,本文的使用的是windows下的Python3.7,对于其他平台同样适用。
pipenv安装
快捷键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
创建虚拟环境时指定当前项目路径存放
指定目录存放虚拟环境,便于统一管理所有的虚拟环境。
但如果想创建项目的时候就创建虚拟环境,且将虚拟环境放到项目路径下,也是可以做到的(将上一步中变量名为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
若想要永久该虚拟环境的镜像源,则需要打开项目目录下的Pipfile
、 Pipfile.lock
文件,将source
栏 url = "https://pypi.org/simple"
链接内容修改为需要的镜像源,例如修改为清华的镜像源url = "https://pypi.tuna.tsinghua.edu.cn/simple"
安装到dev环境
安装调试工具、性能测试工具、python语法工具,这些内容仅在本地环境有用,生产环境不需要这些。
比如单元测试相关的包unittest
、pytest
,只在开发阶段有用,为了和生产环境的包区分开来,可以通过命令 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默认打开项目就加载了虚拟环境,只能修改指定的虚拟环境)
目录下存在 Pipfile
、 Pipfile.lock
文件,已创建过虚拟环境,可通过命令 pipenv shell
进行激活
删除虚拟环境
快捷键Win+R,输入cmd
打开黑屏终端,输入代码
pipenv --rm
注意:该命令无法在pycharm的Terminal终端执行成功,使用pycharm打开项目时,默认激活了项目下的虚拟环境,而使用exit
命令退出虚拟环境,pycharm会关闭当前的Terminal终端
删除虚拟环境后,如果目录下仍存在 Pipfile
、 Pipfile.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 lock -r --dev >requirement.txt
命令中的--dev
并不是说把 Pipfile
文件中 [dev-packages]
下的包导出,而是把所有依赖包导出。
pipenv
还可以通过requirements.txt文件
安装依赖包
pipenv install -r requirement.txt
文章出处登录后可见!