繼續(xù)高手之路第六章 分發(fā)
入口點(diǎn)
先按照包
pip install entry-point-inspector
查看python提供了入口點(diǎn)的包的命令
epi group list
查看指定入口的具體信息
epi group show console_scripts
console_scripts 可以為指定的入口點(diǎn)函數(shù)
為python腳本設(shè)置入口函數(shù)
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")
書上沒寫的一點(diǎn),估計(jì)這玩意應(yīng)用的是python2的規(guī)則
給foobar222目錄里面價(jià)一個(gè) 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",],
},
)
第三部 注冊為入口點(diǎn)函數(shù)
運(yùn)行命令 python setup.py install
接著會(huì)自動(dòng)自動(dòng)python的系統(tǒng)文件Lib 生成foobar222的egg包
而書上值得控制臺(tái)腳本應(yīng)該是生成在了系統(tǒng)目錄的Scripts下面,順帶還附送了該py腳本生成的exe
其實(shí)到這里我已經(jīng)明白這玩意是啥了。。。某種程度上來說這適合于python2,而不是python3,對(duì)于pytho3來說這種方法已經(jīng)落伍了。僅僅只是注冊函數(shù)的話
這玩意的另一個(gè)作用應(yīng)該是無視正常的包的引用法則,直接引用被注冊的函數(shù)功能,這句應(yīng)該是貫穿上下的主要作用,然后我看著書上的代碼突然很痛苦,整個(gè)章節(jié)起碼少了一半的操作命令,雖然猜出來了但是還是很痛苦。太費(fèi)時(shí)間了,全自己摸索。
之后從這里開始分為2種引用辦法。這里對(duì)應(yīng)的是使用插件跟驅(qū)動(dòng)程序
第一種直接指定引用一個(gè)入口點(diǎn)函數(shù)功能
第一種
#!/usr/bin/env python
#-*- coding:utf-8 -*-
from pkg_resources import load_entry_point
import time
load_entry_point('foobar222==1', 'console_scripts', 'foobar')()
另一種是遍歷某一個(gè)入口點(diǎn)下的全部注冊函數(shù),接著使用.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就算了吧,禁止套娃。
到此,第六章學(xué)習(xí)完畢。思考一下,那么這種辦法的缺點(diǎn)是什么。直接對(duì)全局python 開發(fā)函數(shù)接口。