详解python中requirements.txt的一切


Posted in Python onMarch 03, 2017

简介

Python项目中必须包含一个 requirements.txt 文件,用于记录所有依赖包及其精确的版本号。以便新环境部署。

主要的写法如下所示

pip freeze > requirements.txt # 生成requirements.txt
pip install -r requirements.txt # 从requirements.txt安装依赖

支持的写法

-r base.txt # base.txt下面的所有包
pypinyin==0.12.0 # 指定版本(最日常的写法)
django-querycount>=0.5.0 # 大于某个版本
django-debug-toolbar>=1.3.1,<=1.3.3 # 版本范围
ipython # 默认(存在不替换,不存在安装最新版)

第三方工具生成

pip freeze 会附带上一些不需要的包,以及某些包依赖的包~

    pipreqs 自动分析项目中引用的包。对Django项目自动构建的时候忽略了Mysql包,版本也很奇怪;而且联网搜索的时候遇到404就报错跳出了?

    pigar 功能同上,会显示包被项目文件引用的地方(搜索下就能解决的问题啊= =感觉是伪需求),404的问题也存在

    pip-tools 通过第三方文件生成requirements.txt,讲道理为什么不直接写呢,要通过第三方包来做一层转换

推荐用法

一般项目会分为开发环境,测试环境,生产环境等……依赖的包会不同。推荐在文件夹下为每个环境建立一个requirements.txt文件。公有的包存在base.txt供引用

➜ meeting git:(sync) ✗ tree requirements -h
requirements
├── [ 286] base.txt
├── [ 80] local.txt
└── [ 28] production.txt

由于上面提到的工具并不好用~还是推荐手动维护依赖列表。毕竟pip安装后马上去编辑下依赖文件也不是什么麻烦事

setup.py 与 requirements.txt 区别

setup.py 这个文件是用来管理模块的,你可以将你的项目打包为模块上传到 pypi 中,也同样能将项目作为模块放入python 的系统加载模块目录下。

requiremens.txt 这个文件是列举你这个项目引用了哪些非本项目的依赖的,除此之外,没有其他作用。

因此,可以看出这两个项目其实并没有冲突关系,而且有很大共存的必要。

  1. 假如你的项目需要保存为系统模块,或者可安装为系统命令的 setup.py 就必不可少了
  2. 假如你的项目是可以直接运行的,那么 requirements.txt 也是必不可少。
  3. 如果你两种功能都需要,那么就两个文件都不能少。

有这两种功能都需要的么?

必须有啊,而且还很多,例如 Flask,他就支持两种方式:

  1. 以系统命令的方式启动,在 Flask 0.11.1 中新加入了一个 Click 包,他可以让你 setup 之后以命令的方式运行
  2. 直接运行,传统的 Flask 启动方式一般就是 app.run() 或者 python manage.py runserver

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
python字符串连接的N种方式总结
Sep 17 Python
Python标准库笔记struct模块的使用
Feb 22 Python
Python基于lxml模块解析html获取页面内所有叶子节点xpath路径功能示例
May 16 Python
Python logging模块用法示例
Aug 28 Python
Python打包方法Pyinstaller的使用
Oct 09 Python
解决python3.5 正常安装 却不能直接使用Tkinter包的问题
Feb 22 Python
在django中图片上传的格式校验及大小方法
Jul 28 Python
python数据归一化及三种方法详解
Aug 06 Python
python实现猜数游戏
Mar 27 Python
python自动化测试三部曲之unittest框架的实现
Oct 07 Python
Python爬虫之Selenium实现关闭浏览器
Dec 04 Python
Pytorch反向传播中的细节-计算梯度时的默认累加操作
Jun 05 Python
python中异常捕获方法详解
Mar 03 #Python
python利用不到一百行代码实现一个小siri
Mar 02 #Python
Python正则表达式教程之三:贪婪/非贪婪特性
Mar 02 #Python
Python正则表达式教程之二:捕获篇
Mar 02 #Python
Python正则表达式教程之一:基础篇
Mar 02 #Python
Python单例模式实例详解
Mar 01 #Python
python实现字典(dict)和字符串(string)的相互转换方法
Mar 01 #Python
You might like
PHP永久登录、记住我功能实现方法和安全做法
2015/04/27 PHP
PHP的Yii框架使用中的一些错误解决方法与建议
2015/08/21 PHP
TP5框架实现签到功能的方法分析
2020/04/05 PHP
写的htc的数据表格
2007/01/20 Javascript
用javascript实现计算两个日期的间隔天数
2007/08/14 Javascript
关于div自适应高度/左右高度自适应一致的js代码
2013/03/22 Javascript
jquery获取复选框被选中的值
2014/04/10 Javascript
JavaScript的设计模式经典之代理模式
2016/02/24 Javascript
angular2使用简单介绍
2016/03/01 Javascript
jquery实现全选和全不选功能效果的实现代码【推荐】
2016/05/05 Javascript
JS递归遍历对象获得Value值方法技巧
2016/06/14 Javascript
angularjs封装bootstrap时间插件datetimepicker
2016/06/20 Javascript
jQuery模拟完美实现经典FLASH导航动画效果【附demo源码下载】
2016/11/09 Javascript
原生JS+Canvas实现五子棋游戏实例
2017/06/19 Javascript
浅谈vue单一组件下动态修改数据时的全部重渲染
2018/03/01 Javascript
Vuex,iView UI面包屑导航使用扩展详解
2019/11/04 Javascript
vue学习之Vue-Router用法实例分析
2020/01/06 Javascript
nuxt静态部署打包相对路径操作
2020/11/06 Javascript
js基于canvas实现时钟组件
2021/02/07 Javascript
[46:47]2014 DOTA2国际邀请赛中国区预选赛5.21 LGD-CDEC VS NE
2014/05/22 DOTA
[02:55]含熏伴清风,风行者至宝、屠夫身心及典藏宝瓶二展示
2020/09/08 DOTA
python格式化字符串实例总结
2014/09/28 Python
Python批量查询域名是否被注册过
2017/06/21 Python
Python 解决中文写入Excel时抛异常的问题
2018/05/03 Python
Python常用的json标准库
2019/02/19 Python
python3实现二叉树的遍历与递归算法解析(小结)
2019/07/03 Python
python实现发送form-data数据的方法详解
2019/09/27 Python
你常见到的runtime exception
2016/09/05 面试题
结婚典礼证婚词
2014/01/08 职场文书
中班上学期幼儿评语
2014/04/30 职场文书
五月的鲜花活动方案
2014/08/21 职场文书
上课说话检讨书
2015/01/27 职场文书
项目经理岗位职责
2015/01/31 职场文书
中秋节寄语2015
2015/03/24 职场文书
学校开除通知书
2015/04/25 职场文书
飞屋环游记观后感
2015/06/08 职场文书