继续高手之路第六章 分发
入口点
先按照包
pip install entry-point-inspector
查看python提供了入口点的包的命令
epi group list
查看指定入口的具体信息
epi group show console_scripts
console_scripts 可以为指定的入口点函数
为python脚本设置入口函数
foobar222/client.py
#!/usr/bin/env python
#-*- coding:utf-8 -*-
def main():
print("Client started")
foobar222/server.py
#!/usr/bin/env python
#-*- coding:utf-8 -*-
def main():
print("Server started")
书上没写的一点,估计这玩意应用的是python2的规则
给foobar222目录里面价一个 init.py
手写setup.py
#!/usr/bin/env python
#-*- coding:utf-8 -*-
from setuptools import setup,find_packages
setup(
name = "foobar222",
version = "1",
author="Julien Danjou",
author_email="xzwgm81@163.com",
description = "make in chinese",
url = "https://www.baidu.com/",
packages = ["foobar222"],
entry_points = {
"console_scripts":["foobard = foobar222.server:main",
"foobar = foobar222.client:main",],
},
)
第三部 注册为入口点函数
运行命令 python setup.py install
接着会自动自动python的系统文件Lib 生成foobar222的egg包
而书上值得控制台脚本应该是生成在了系统目录的Scripts下面,顺带还附送了该py脚本生成的exe
其实到这里我已经明白这玩意是啥了。。。某种程度上来说这适合于python2,而不是python3,对于pytho3来说这种方法已经落伍了。仅仅只是注册函数的话
这玩意的另一个作用应该是无视正常的包的引用法则,直接引用被注册的函数功能,这句应该是贯穿上下的主要作用,然后我看着书上的代码突然很痛苦,整个章节起码少了一半的操作命令,虽然猜出来了但是还是很痛苦。太费时间了,全自己摸索。
之后从这里开始分为2种引用办法。这里对应的是使用插件跟驱动程序
第一种直接指定引用一个入口点函数功能
第一种
#!/usr/bin/env python
#-*- coding:utf-8 -*-
from pkg_resources import load_entry_point
import time
load_entry_point('foobar222==1', 'console_scripts', 'foobar')()
另一种是遍历某一个入口点下的全部注册函数,接着使用.load()激活
#!/usr/bin/env python
#-*- coding:utf-8 -*-
from pkg_resources import iter_entry_points
import time
for i in iter_entry_points("console_scripts"):
print(i)
if str(i) == "foobard = foobar222.server:main":
i.load()()
到此为止,stevedore就算了吧,禁止套娃。
到此,第六章学习完毕。思考一下,那么这种办法的缺点是什么。直接对全局python 开发函数接口。
网友评论