详解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实现的Kmeans++算法实例
Apr 26 Python
在Python中使用mongoengine操作MongoDB教程
Apr 24 Python
python字典DICT类型合并详解
Aug 17 Python
利用Anaconda简单安装scrapy框架的方法
Jun 13 Python
python 将print输出的内容保存到txt文件中
Jul 17 Python
python字典一键多值实例代码分享
Jun 14 Python
python/Matplotlib绘制复变函数图像教程
Nov 21 Python
python django中8000端口被占用的解决
Dec 17 Python
Django表单提交后实现获取相同name的不同value值
May 14 Python
opencv 图像轮廓的实现示例
Jul 08 Python
python中random.randint和random.randrange的区别详解
Sep 20 Python
pytorch 如何使用amp进行混合精度训练
May 24 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请求Socket接口测试实例
2016/08/12 PHP
Javascript实例教程(19) 使用HoTMetal(4)
2006/12/23 Javascript
Zero Clipboard js+swf实现的复制功能使用方法
2010/03/07 Javascript
extjs 3.31 TreeGrid实现静态页面加载json到TreeGrid里面
2013/04/02 Javascript
JavaScript判断访问的来源是手机还是电脑,用的哪种浏览器
2013/12/12 Javascript
js闭包实例汇总
2014/11/09 Javascript
如何解决easyui自定义标签 datagrid edit combobox 手动输入保存不上
2015/12/26 Javascript
bootstrap实现每隔5秒自动轮播效果
2016/12/20 Javascript
从零学习node.js之express入门(六)
2017/02/25 Javascript
bootstrap表单按回车会自动刷新页面的解决办法
2017/03/08 Javascript
js实现鼠标拖拽多选功能示例
2017/08/01 Javascript
js实现随机点名小功能
2017/08/17 Javascript
微信小程序开发之好友列表字母列表跳转对应位置
2017/09/26 Javascript
用vue封装插件并发布到npm的方法步骤
2017/10/18 Javascript
利用node.js如何创建子进程详解
2017/12/09 Javascript
Angular-UI Bootstrap组件实现警报功能
2018/07/16 Javascript
Koa 中的错误处理解析
2019/04/09 Javascript
微信小程序iOS下拉白屏晃动问题解决方案
2019/10/12 Javascript
[06:11]2014DOTA2国际邀请赛 专访团结一心的VG战队
2014/07/21 DOTA
Python 字符串操作方法大全
2014/03/11 Python
Python单元测试实例详解
2018/05/25 Python
Python走楼梯问题解决方法示例
2018/07/25 Python
用Python将结果保存为xlsx的方法
2019/01/28 Python
完美解决python3.7 pip升级 拒绝访问问题
2019/07/12 Python
Python二元赋值实用技巧解析
2019/10/25 Python
python实现udp传输图片功能
2020/03/20 Python
pycharm 2018 激活码及破解补丁激活方式
2020/09/21 Python
大学生自我鉴定范文
2013/12/28 职场文书
幼儿园教育教学反思
2014/01/31 职场文书
三年级班级文化建设方案
2014/05/04 职场文书
2015年收银工作总结范文
2015/04/01 职场文书
离婚起诉书范文2016
2015/11/26 职场文书
干货:企业内部人才推荐奖励方案!
2019/07/09 职场文书
为什么RedisCluster设计成16384个槽
2021/09/25 Redis
vue elementUI批量上传文件
2022/04/26 Vue.js
Win10服务主机占用内存怎么办?Win10服务主机进程占用大量内存解决方法
2022/09/23 数码科技