Python distribute到底使用package_data还是MANIFEST.in?
今天看Flask的文档,里面提到如何通过distribute发布你自己的Python包。讲包含文件的时候,提到要用MANIFEST.in并将include_package_data设置为True。
由于我自己也发布过几个包,当时并没有设置include_package_data,而且看lxyu的包setup.py里面设置的是package_data,所以就想搞清楚到底是怎么回事。
Google了一会,最终搞清楚了区别,记录在这里。
1、package_data
这个确实可以包含文件,但是实际上这是一个“lie”,也就是谎言。
为什么这么说呢?因为生成最终发布文件的时候有两种命令:
$ python setup.py bdist upload $ python setup.py sdist upload
看到了吗?区别就是bdist和sdist。
bdist是发布二进制文件,sdist是发布源文件。
说package_data是谎言的原因就是,package_data只有在使用bdist时候才有用!也就是说如果你使用sdist的话是无法正确包含文件的!
更新:我搜到的这篇文章是2011年的,刚才搜了一下,Python2.7里面已经修正了这个问题,现在会自动把package_data里面的内容添加到MANIFEST文件中。所以实际上是间接使用了第二种方法。我个人觉得还是直接用MANIFEST.in比较好,更加统一。
2、MANIFEST.in
相比之下MANIFEST.in才是正确方法。MANIFEST.in无论在sdist还是bdist下都可以正常工作。
不过我还是有个疑问,就是include_package_data必须设置吗?
Flask文档中提到必须设置为True,否则MANIFEST.in不起作用。不过我自己发布包的时候并没有设置,还是可以用,所以猜测这个参数的默认值就是True。
保险起见,还是设置为True吧。
总结起来,正确包含文件的方式是:
- 使用MANIFEST.in
- 设置include_package_data=True
Python distribute到底使用package_data还是MANIFEST.in?的更多相关文章
- 学Python后到底能干什么?
Python是一种什么语言? Python是一种计算机程序设计语言.你可能已经听说过很多种流行的编程语言,比如非常难学的C语言,非常流行的Java语言,适合初学者的Basic语言,适合网页编程的Jav ...
- python mixin到底是什么
python mixin到底是什么 1.什么是Mixin 在面向对象编程中,Mixin是一种类,这种类包含了其他类要使用的方法,但不必充当其他类的父类.其他类是如何获取Mixin中的方法因语言的不同而 ...
- [python]闭包到底是什么鬼?
这些东西是我在慕课网,廖雪峰大神的python课中学到的.自己写成笔记的形式分享给大家. 先来看一段代码: def f1(x): return x*x def new_fn(f): def fn(j) ...
- python mixin到底是什么 django
1.什么是Mixin 在面向对象编程中,Mixin是一种类,这种类包含了其他类要使用的方法,但不必充当其他类的父类.其他类是如何获取Mixin中的方法因语言的不同而不同.所以有时候Mixin被描述为' ...
- Python 分析到底是谁操纵《庆余年》上了热搜?
庆余年电视剧终于在前两天上了,这两天赶紧爬取数据看一下它的表现. 庆余年 <庆余年>是作家猫腻的小说.这部从2007年就开更的作品拥有固定的书迷群体,也在文学IP价值榜上有名. ...
- TDD 与 CI 在 Python 中的实践
社区化产品的长久生存之道可能莫过于对迭代周期的控制.还记得以前采用老土的阶段开发的年代,将软件生命周期分为各个阶段,当到达每个阶段的里程碑则集中所有的资源.人力作全面冲刺.每次到了里程碑的检查点冲过了 ...
- 以字符串为例,谈谈Python到底要学到什么程度
古语云:慈不掌兵,义不为商:离商业越近,离人性越远:我们在自学数据科学时,一定会辅助一些书籍或者视频来学习,怎么学习,选择哪些资料来学习?这时,我们都要理解好第一句话,理解不好,浪费钱是次要,重要的是 ...
- Python函数参数默认值的陷阱和原理深究"
本文将介绍使用mutable对象作为Python函数参数默认值潜在的危害,以及其实现原理和设计目的 本博客已经迁移至: http://cenalulu.github.io/ 本篇博文已经迁移,阅读全文 ...
- python学习之最简单的用户注册及登录验证小程序
文章都是从我的个人博客上粘贴过来的哦,更多内容请点击 http://www.iwangzheng.com 正如很多同学所知道的,楼主开始学习python了,前进的道路曲曲折折,有荆棘也有陷阱,从最简单 ...
随机推荐
- Linux 系统的/var目录
/var目录主要针对常态性变动的文件,包括缓存(cache).登录档(log file)以及某些软件运作所产生的文件 /var目录下的重要目录 目录 应放置文件内容 /var/cache/ 应用程序本 ...
- Linux 隐藏系统信息
Linux查看系统信息 [更多参考]https://www.cnblogs.com/ftl1012/p/uname.html Linux隐藏系统信息 查看: cat /etc/issue.net ...
- ZT 类模板的声明和实现是不能分离的
http://bbs.csdn.net/topics/380250382 adlay adlay 等级: #9 得分:0 回复于: 2012-03-31 11:19:35 引用 6 楼 的回复: 引 ...
- 转贴:C语言链表基本操作
http://www.oschina.net/code/snippet_252667_27314#comments 这个代码有很多错误,估计是从老谭书上抄来但是很多还抄错了:对照老谭的书好好研究下.切 ...
- python第二十三课——dict中的函数
dic1 = {...} dic2 = {...} dic1.update(dic2) 1.update(dict):dic1调用update传入dic2,如果dic2中的内容在dic1中不存在,那么 ...
- Oracle学习(十一):PL/SQL
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/v123411739/article/details/30231659 1.知识点:能够对照以下的录屏 ...
- 简单的Windows 服务的安装和卸载
步骤: 1.运行--〉cmd:打开cmd命令框 2.在命令行里定位到InstallUtil.exe所在的位置 InstallUtil.exe 默认的安装位置是在C:/Windows/Microsoft ...
- jenkins ansible
ansible-playbook - hosts: test remote_user: root vars: warpath: "/root/.jenkins/workspace/172.1 ...
- 20145203盖泽双:Java实验报告二
Java实验报告二:Java面向对象程序设计 实验要求: 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验内容 ...
- virtualbox+vagrant学习-2(command cli)-7-vagrant login命令
Login ⚠️该命令已经弃用了,别名为vagrant cloud auth login.看本博客的 格式: vagrant cloud auth login [options] 登录命令用于使用Ha ...