在上篇文章中我们知道了 setuptools 是什么,以及它基本的功能和用法。在这篇文章中,我们会介绍如何讲setuptools应用于稍大的项目中,通过 setuptools 控制包中的文件。
0x03 使用 find_packages()
在之前的例子中,我们使用的都是 setup()
的默认参数,使用默认参数只能打包一些简单的、不复杂的工程,如果我们的工程中的文件越来越多,就不能使用它的默认参数了。
现在我们来建这样一个工程:
1 | . |
如果像之前那样使用 setup()
的默认参数来进行打包,我们会看到的 egg 如下:
1 | Archive: demo1-0.1-py2.7.egg |
依然是只有 __init__.py
,如果我们要想把上边目录中的 .txt
文件和 /data
下的 .dat
文件也包含到我们的egg包中,我们需要修改 setup.py
:
1 | #-*- coding:utf-8 -*- |
这时我们再看一下 egg 包中的内容:
1 | Archive: demo-0.1-py2.7.egg |
我们也可以排除掉某些文件:
1 | find_packages(exclude=["*.tests", "*.tests.*", "tests.*", "tests"]) |
0x04 使用 entry_points
entry_points 是一个字典,从entry point组名映射道一个表示entry point的字符串或字符串列表。Entry points是用来支持动态发现服务和插件的,也用来支持自动生成脚本。
比如说:
1 | setup( |
查看 /usr/local/bin/foo
内容:
1 | #!/usr/bin/python |
这个内容其实显示的意思是,foo将执行 console_scripts
中定义的foo所代表的函数。执行foo,发现打出了 hello world!
,和预期结果一样。
0x05 总结
这篇文章介绍了一些 setuptools 比较进阶的使用方法,对于更详细的其他用法,详见官方文档
本文的版权归作者 罗远航 所有,采用 Attribution-NonCommercial 3.0 License。任何人可以进行转载、分享,但不可在未经允许的情况下用于商业用途;转载请注明出处。感谢配合!