参考:http://blog.csdn.net/pfm685757/article/details/48651389
entry point是一个字典,从entry point组名映射道一个表示entry point的字符串或字符串列表。Entry points是用来支持动态发现服务和插件的,也用来支持自动生成脚本。
下面是一个demo。
1 、新建一个目录myproject,在该目录下新建一个setup.py文件,内容如下
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 6/2/17 2:39 PM
# @Site :
# @File : setup.py.py
# @Software: PyCharm
'''
如果使用命令python setup.py bdist_egg,那么会在dist目录中生成foo-1.0-py2.7.egg包,
setup.py中第一句引入需要改为from setuptools import setup)。使用者拿到这个包后,解压,
到foo-1.0目录下执行:python setup.py install,那么,foo.py就会被拷贝到python类路径下,
可以被导入使用(如果安装是egg文件,会把egg文件拷贝到dist-packages目录下)。
'''
from setuptools import setup , find_packages
# name包名 ,version版本号,packages所包含的其他包
# 使用find_packages():默认在setup.py同一目录下搜索含有__init__.py的包,可以将包统一放在src目录中,可能有数据文件夹
# 执行python setup.py bdist_egg 生成egg文件,执行python setup.py install 会将入口文件生成
'''
[root@localhost bin]# cat foo
#!/usr/bin/python
# 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')()
)
'''
'''
setup(
name = "demo" ,
version = "0.1" ,
packages = find_packages(),)
'''
setup(
name = "demo",
version = "0.1",
packages = find_packages('src'), # 包含所有src的包
package_dir = {'' : 'src'} , # 告诉distutils包src下
package_data = {
# 任何包中有.txt文件,都包含它
'':['*.txt'],
# 包含demo的data文件夹中的*.dat
'demo' : ['data/*.dat'],
},
entry_points = {
'console_scripts': [
'foo = demo:test',
'bar = demo:test',
],
'gui_scripts': [
'baz = demo:test',
]
}
)
2、在myproject目录下,新建一个目录src,在src下面新建目录data,在data下面新建文件__init__.py文件,内容如下
#!/usr/bin/env python
# -*- coding: utf-8 -*-
def test():
print "hello world"
if __name__ == '__main__':
test()
进入到含有setup.py目录下,执行如下命令:
python setup.py bdist_egg
然后,安装该模块,执行如下命令:
python setup.py install
4、使用自己创建的包
执行如下命令:
foo
会得到
hello world
执行命令
bar
同样会得到
hello world