使用Pipfile代替reqirements.txt
很多语言都提供了环境隔离的支持,例如nodejs的node_module,golang的go mod,python也有virtualenv和pyvenv等机制。为了建立依赖快照,通常会用pip freeze > requirements.txt
命令生成一个requirements.txt文件,在一些场景下这种方式就可以满足需求,但是在复杂场景下requirements.txt就力不从心了。
requirements.txt
1 | appdirs==1.4.3 |
requirements.txt文件中只记录了依赖的版本,所以如果遇到官方的pypi源下载速度慢,需要使用更快的国内镜像下载,通常只能使用pip install -i
安装或者修改全局的pip.conf文件。
当某个项目使用确定的python版本,这个版本也并不能在requirements.txt中体现,只能通过readme或者文档来记录,并且需要在创建虚拟环境时手动调用正确的python版本。
项目需要使用flake8、pylint、black等代码优化工具时,这些依赖也会被pip freeze
命令写入requirements.txt中,然而这些依赖是不需要出现在生产环境的。
Pipfile
Pipenv的出现,一举解决了上面的问题,Pipenv是Kenneth Reitz在2017年1月发布的Python依赖管理工具,他所基于的Pipfile则用来替代requirements.txt。
1 | [[source]] |
好处1:记录内容更详细
相比于requirements.txt,Pipfile多了pip源的设置,可以针对不同项目使用不同环境。并且将依赖分为dev和默认环境,例如pylint、flake8、black等依赖,可以将他们放入dev依赖中。
好处2:减少手动激活虚拟环境次数
pipenv将virtualenv、pyvenv和pip命令整合使用,pipenv减少了手动激活虚拟环境的次数,使用pyvenv模块运行main.py,需要先执行source venv/bin/activate
激活虚拟环境,然后再执行python main.py
,而pipenv只需要在项目根目录执行pipenv run main.py
,就可以自动激活当前虚拟环境并执行main.py。如果需要安装依赖的,直接执行pipenv install xxx
,也不需要先激活虚拟环境,再使用pip install xxx
安装。
好处3:锁机制
从Pipfile文件添加或删除安装的包,会生成Pipfile.lock来锁定安装包的版本和依赖信息,通过pipfile.lock文件,可以精确恢复以来的版本。
常用命令
1 | # 初始化虚拟环境(可自己指定python版本) |