美文网首页
2020-02-25python高手之路学习随笔(6.2)

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

作者: 七天七念 | 来源:发表于2020-02-26 00:53 被阅读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 开发函数接口。

    相关文章

      网友评论

          本文标题:2020-02-25python高手之路学习随笔(6.2)

          本文链接:https://www.haomeiwen.com/subject/pddcchtx.html