zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    docker (2) 私有仓库的建立
    golang (5) http 请求分析
    java (1)
    golang (5) ---工程管理
    Mac使用一些经验
    数组的遍历
    进制
    数组的初始化
    数组基本概念
    博客开始更新第一天
  • 原文地址:https://www.cnblogs.com/numbbbbb/p/3615155.html
Copyright © 2011-2022 走看看