详解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通过正则查找微博@(at)用户的方法
Mar 13 Python
Python中使用logging模块打印log日志详解
Apr 05 Python
Python中遍历字典过程中更改元素导致异常的解决方法
May 12 Python
Python实现删除时保留特定文件夹和文件的示例
Apr 27 Python
对python pandas 画移动平均线的方法详解
Nov 28 Python
Python3.6+Django2.0以上 xadmin站点的配置和使用教程图解
Jun 04 Python
Django使用Celery加redis执行异步任务的实例内容
Feb 20 Python
Python 窗体(tkinter)下拉列表框(Combobox)实例
Mar 04 Python
matplotlib 对坐标的控制,加图例注释的操作
Apr 17 Python
python 爬取免费简历模板网站的示例
Sep 27 Python
python ssh 执行shell命令的示例
Sep 29 Python
Python 利用argparse模块实现脚本命令行参数解析
Dec 28 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查询域名状态whois的类
2006/11/25 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
2017/07/20 PHP
windows下的WAMP环境搭建图文教程(推荐)
2017/07/27 PHP
贴一个在Mozilla中常用的Javascript代码
2007/01/09 Javascript
JS解析json数据并将json字符串转化为数组的实现方法
2012/12/25 Javascript
jQuery在iframe中无法弹出对话框的解决方法
2014/01/12 Javascript
浅析Javascript中“==”与“===”的区别
2014/12/23 Javascript
JavaScript实现穷举排列(permutation)算法谜题解答
2014/12/29 Javascript
Js为表单动态添加节点内容的方法
2015/02/10 Javascript
javascript匀速运动实现方法分析
2016/01/08 Javascript
javascript实现dom元素可拖动
2016/03/21 Javascript
js 弹出虚拟键盘修改密码的简单实例
2016/10/10 Javascript
Vue input控件通过value绑定动态属性及修饰符的方法
2017/05/03 Javascript
JavaScript使用readAsDataUrl方法预览图片
2017/05/10 Javascript
JavaScript选取(picking)和反选(rejecting)对象的属性方法
2017/08/16 Javascript
node简单实现一个更改头像功能的示例
2017/12/29 Javascript
动态Axios的配置步骤详解
2018/01/12 Javascript
React 组件转 Vue 组件的命令写法
2018/02/28 Javascript
区别JavaScript函数声明与变量声明
2018/09/12 Javascript
基于jQuery实现可编辑的表格
2019/12/11 jQuery
vue 实现用户登录方式的切换功能
2020/04/14 Javascript
[01:32]寻找你心中的那团火 DOTA2 TI9火焰传递活动今日开启
2019/05/16 DOTA
python实现的一只从百度开始不断搜索的小爬虫
2013/08/13 Python
仅用50行代码实现一个Python编写的计算器的教程
2015/04/17 Python
Python语言描述随机梯度下降法
2018/01/04 Python
详解python中*号的用法
2019/10/21 Python
Python如何telnet到网络设备
2021/02/18 Python
python 统计list中各个元素出现的次数的几种方法
2021/02/20 Python
纯CSS3代码实现文字描边
2016/04/25 HTML / CSS
西班牙美妆电商:Perfume’s Club(有中文站)
2018/08/08 全球购物
妇产医师自荐信
2014/01/29 职场文书
2014年中班元旦活动方案
2014/02/14 职场文书
我的教育故事演讲稿
2014/05/04 职场文书
供电工程专业求职信
2014/08/09 职场文书
Redis遍历所有key的两个命令(KEYS 和 SCAN)
2021/04/12 Redis
MySQL库表太大怎么办? 数据库分库分表项目实践
2022/04/11 MySQL