详解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中的文本处理
Apr 11 Python
Python使用xlrd模块操作Excel数据导入的方法
May 26 Python
Python实现二分查找算法实例
May 26 Python
Python base64编码解码实例
Jun 21 Python
Python urls.py的三种配置写法实例详解
Apr 28 Python
基于Django的python验证码(实例讲解)
Oct 23 Python
python学生信息管理系统
Mar 13 Python
python微信公众号之关键词自动回复
Jun 15 Python
python 将print输出的内容保存到txt文件中
Jul 17 Python
numpy:找到指定元素的索引示例
Nov 26 Python
对tensorflow中的strides参数使用详解
Jan 04 Python
python3将变量输入的简单实例
Aug 19 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输出XML到页面的3种方法详解
2013/06/06 PHP
PHP设计模式之观察者模式(Observer)详细介绍和代码实例
2014/04/08 PHP
PHP不用递归实现无限分级的例子分享
2014/04/18 PHP
thinkphp实现发送邮件密码找回功能实例
2014/12/01 PHP
PHP浮点比较大小的方法
2016/02/14 PHP
laravel 框架结合关联查询 when()用法分析
2019/11/22 PHP
Laravel 框架路由原理与路由访问实例分析
2020/04/14 PHP
Javascript 跨域访问解决方案
2009/02/14 Javascript
JS 的应用开发初探(mootools)
2009/12/19 Javascript
DWZ刷新dialog解决方法
2013/03/03 Javascript
javascript中全局对象的isNaN()方法使用介绍
2013/12/19 Javascript
基于NodeJS的前后端分离的思考与实践(五)多终端适配
2014/09/26 NodeJs
js oncontextmenu事件使用详解
2017/03/25 Javascript
element ui里dialog关闭后清除验证条件方法
2018/02/26 Javascript
基于JS实现父组件的请求服务过程解析
2019/10/14 Javascript
Vue.js数字输入框组件使用方法详解
2019/10/19 Javascript
vue中axios封装使用的完整教程
2021/03/03 Vue.js
Python中__name__的使用实例
2015/04/14 Python
Python自动调用IE打开某个网站的方法
2015/06/03 Python
关于pip的安装,更新,卸载模块以及使用方法(详解)
2017/05/19 Python
python 表达式和语句及for、while循环练习实例
2017/07/07 Python
微信小程序跳一跳游戏 python脚本跳一跳刷高分技巧
2018/01/04 Python
python爬取盘搜的有效链接实现代码
2019/07/20 Python
python matplotlib 画dataframe的时间序列图实例
2019/11/20 Python
python飞机大战pygame碰撞检测实现方法分析
2019/12/17 Python
python matplotlib实现将图例放在图外
2020/04/17 Python
用纯CSS3实现网页中常见的小箭头
2017/10/16 HTML / CSS
Linux如何命名文件--使用文件名时应注意
2014/05/29 面试题
请说出这段代码执行后a和b的值分别是多少
2015/03/28 面试题
新闻系毕业生推荐信
2013/11/16 职场文书
煤矿安全演讲稿
2014/05/09 职场文书
投标承诺书怎么写
2014/05/24 职场文书
西安兵马俑导游词
2015/02/02 职场文书
导游词之秦始皇兵马俑博物馆
2019/09/29 职场文书
pandas提升计算效率的一些方法汇总
2021/05/30 Python
Python实现滑雪小游戏
2021/09/25 Python