详解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 相关文章推荐
Python3读取文件常用方法实例分析
May 22 Python
使用python读取txt文件的内容,并删除重复的行数方法
Apr 18 Python
修复 Django migration 时遇到的问题解决
Jun 14 Python
对Xpath 获取子标签下所有文本的方法详解
Jan 02 Python
pygame实现俄罗斯方块游戏(基础篇1)
Oct 29 Python
Python3列表List入门知识附实例
Feb 09 Python
python 已知三条边求三角形的角度案例
Apr 12 Python
Python虚拟环境venv用法详解
May 25 Python
VSCode中autopep8无法运行问题解决方案(提示Error: Command failed,usage)
Mar 02 Python
看看如何用Python绘制小米新版天价logo
Apr 20 Python
聊聊Python中关于a=[[]]*3的反思
Jun 02 Python
Python torch.flatten()函数案例详解
Aug 30 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新手上路(五)
2006/10/09 PHP
php判断输入不超过mysql的varchar字段的长度范围
2011/06/24 PHP
php _autoload自动加载类与机制分析
2012/02/10 PHP
跟我学Laravel之快速入门
2014/10/15 PHP
php约瑟夫问题解决关于处死犯人的算法
2015/03/23 PHP
php实现微信模板消息推送
2018/03/30 PHP
实例解析php的数据类型
2018/10/24 PHP
Laravel框架基于中间件实现禁止未登录用户访问页面功能示例
2019/01/17 PHP
tp5(thinkPHP5框架)时间查询操作实例分析
2019/05/29 PHP
静态页面下用javascript操作ACCESS数据库(读增改删)的代码
2007/05/14 Javascript
JavaScript 面向对象的之私有成员和公开成员
2010/05/04 Javascript
DOM_window对象属性之--clipboardData对象操作代码
2011/02/03 Javascript
点击按钮自动加关注的代码(sina微博/QQ空间/人人网/腾讯微博)
2014/01/02 Javascript
js点击事件链接的问题解决
2014/04/25 Javascript
Eclipse配置Javascript开发环境图文教程
2015/01/29 Javascript
d3.js实现简单的网络拓扑图实例代码
2016/11/06 Javascript
Bootstrap Modal遮罩弹出层(完整版)
2016/11/21 Javascript
微信小程序版本自动更新的方法
2019/06/14 Javascript
微信小程序获取复选框全选反选选中的值(实例代码)
2019/12/17 Javascript
Vue+Bootstrap收藏(点赞)功能逻辑与具体实现
2020/10/22 Javascript
ptyhon实现sitemap生成示例
2014/03/30 Python
python返回昨天日期的方法
2015/05/13 Python
django文档学习之applications使用详解
2018/01/29 Python
详解Python locals()的陷阱
2019/03/26 Python
Python 3.6 中使用pdfminer解析pdf文件的实现
2019/09/25 Python
django和flask哪个值得研究学习
2020/07/31 Python
Python 远程开关机的方法
2020/11/18 Python
HTML5 Geolocation API的正确使用方法
2018/12/04 HTML / CSS
ABOUT YOU罗马尼亚:超过600个时尚品牌
2019/09/19 全球购物
匈牙利超级网上商店和优惠:Alza.hu
2019/12/17 全球购物
Linux如何命名文件--使用文件名时应注意
2014/05/29 面试题
营销专业应届生求职信
2013/11/26 职场文书
共产党员公开承诺书范文
2014/03/28 职场文书
农村优秀教师事迹材料
2014/08/27 职场文书
党的群众路线教育实践活动批评与自我批评发言稿
2014/10/16 职场文书
节约用电通知
2015/04/25 职场文书