Python 分发工具初探之 setuptools 进阶
2016-03-25 21:12
477 查看
在上篇文章中我们知道了 setuptools 是什么,以及它基本的功能和用法。在这篇文章中,我们会介绍如何讲setuptools应用于稍大的项目中,通过 setuptools 控制包中的文件。
现在我们来建这样一个工程:
如果像之前那样使用
依然是只有
这时我们再看一下 egg 包中的内容:
我们也可以排除掉某些文件:
比如说:
查看
这个内容其实显示的意思是,foo将执行
本文的版权归作者 罗远航 所有,采用 Attribution-NonCommercial 3.0 License。任何人可以进行转载、分享,但不可在未经允许的情况下用于商业用途;转载请注明出处。感谢配合!
0x03 使用 find_packages()
在之前的例子中,我们使用的都是setup()的默认参数,使用默认参数只能打包一些简单的、不复杂的工程,如果我们的工程中的文件越来越多,就不能使用它的默认参数了。
现在我们来建这样一个工程:
. ├── setup.py └── src ├── demo.egg-info │ ├── PKG-INFO │ ├── SOURCES.txt │ ├── dependency_links.txt │ └── top_level.txt └── test ├── __init__.py ├── a.txt └── data ├── data1.dat └── data2.dat 4 directories, 9 files
如果像之前那样使用
setup()的默认参数来进行打包,我们会看到的 egg 如下:
Archive: demo1-0.1-py2.7.egg Length Date Time Name -------- ---- ---- ---- 1 03-25-16 20:27 EGG-INFO/dependency_links.txt 177 03-25-16 20:27 EGG-INFO/PKG-INFO 141 03-25-16 20:27 EGG-INFO/SOURCES.txt 5 03-25-16 20:27 EGG-INFO/top_level.txt 1 03-25-16 20:27 EGG-INFO/zip-safe 102 03-22-16 23:48 test/__init__.py 354 03-25-16 20:27 test/__init__.pyc -------- ------- 781 7 files
依然是只有
__init__.py,如果我们要想把上边目录中的
.txt文件和
/data下的
.dat文件也包含到我们的egg包中,我们需要修改
setup.py:
#-*- coding:utf-8 -*- from setuptools import setup, find_packages setup( name = "demo", version = "0.1", # 包含所有src目录下的包 packages = find_packages('src'), package_dir = {'':'src'}, package_data = { # 包含所有.txt文件 '':['*.txt'], # 包含data目录下所有的.dat文件 'test':['data/*.dat'], } )
这时我们再看一下 egg 包中的内容:
Archive: demo-0.1-py2.7.egg Length Date Time Name -------- ---- ---- ---- 1 03-25-16 20:47 EGG-INFO/dependency_links.txt 176 03-25-16 20:47 EGG-INFO/PKG-INFO 220 03-25-16 20:47 EGG-INFO/SOURCES.txt 5 03-25-16 20:47 EGG-INFO/top_level.txt 1 03-25-16 20:47 EGG-INFO/zip-safe 102 03-22-16 23:48 test/__init__.py 354 03-25-16 20:47 test/__init__.pyc 0 03-25-16 17:24 test/a.txt 0 03-25-16 17:24 test/data/data1.dat 0 03-25-16 17:24 test/data/data2.dat -------- ------- 859 10 files
我们也可以排除掉某些文件:
find_packages(exclude=["*.tests", "*.tests.*", "tests.*", "tests"])
0x04 使用 entry_points
entry_points 是一个字典,从entry point组名映射道一个表示entry point的字符串或字符串列表。Entry points是用来支持动态发现服务和插件的,也用来支持自动生成脚本。比如说:
setup( entry_points = { 'console_scripts': [ 'foo = demo:test', 'bar = demo:test', ], 'gui_scripts': [ 'baz = demo:test', ] } ) 我们再安装这个 egg,会发现在安装过程中会出现: ```bash Installing foo script to /usr/local/bin Installing bar script to /usr/local/bin <div class="se-preview-section-delimiter"></div>
查看
/usr/local/bin/foo内容:
<div class="se-preview-section-delimiter"></div> #!/usr/bin/python <div class="se-preview-section-delimiter"></div> # EASY-INSTALL-ENTRY-SCRIPT: 'demo==0.1','console_scripts','foo' __requires__ = 'demo==0.1' import sys from pkg_resources import load_entry_point if __name__ == '__main__': sys.exit( load_entry_point('demo==0.1', 'console_scripts', 'foo')() )
这个内容其实显示的意思是,foo将执行
console_scripts中定义的foo所代表的函数。执行foo,发现打出了
hello world!,和预期结果一样。
0x05 总结
这篇文章介绍了一些 setuptools 比较进阶的使用方法,对于更详细的其他用法,详见官方文档本文的版权归作者 罗远航 所有,采用 Attribution-NonCommercial 3.0 License。任何人可以进行转载、分享,但不可在未经允许的情况下用于商业用途;转载请注明出处。感谢配合!
相关文章推荐
- python--类方法、对象方法、静态方法
- Python--类定义
- python 使用 passlib 库在 windows 平台实现 crypt
- Spark机器学习7·降维模型(scala&python)
- Spark机器学习1·编程入门(scala/java/python)
- python 模拟登陆leetcode
- Python环境的安装
- Python碎片小知识点总结
- 自己实现一个Python调试器
- python之2048
- 两篇文章掌握Python语法和内置函数功能(第二篇)
- Python中对字典排序
- python 正则表达式的学习
- python操作Excel读写--使用xlrd
- python 冒号与逗号的区别
- Python学习笔记(三)高级特性
- python None与Null
- [python]python的包管理工具:pip和easy_install
- python学习(七):面向对象(二)
- python 中求和函数 sum详解