2020-02-25python高手之路学习随笔(6.2)

2020-02-26  本文已影响0人  七天七念

继续高手之路第六章 分发

入口点
先按照包
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 开发函数接口。

上一篇 下一篇

猜你喜欢

热点阅读