突然想知道类似django-admin、you-get这种不用Python执行的自定义命令怎么实现的的,查了一下setuptools打包时配置一下entry_points可以实现。
工程结构
setup.py代码:
#setup.py
from setuptools import setup
setup(
name = "setuptoolsdemo",
version = "1.0.0",
author = "wangjinyur",
author_email = "wangjinyuxxx@gmail.com",
description = ("An demonstration of setuptools-demo."),
url = "http://www.baidu.com",
packages=['src'],
entry_points={
'console_scripts': ['setup-func=src.appdemo:hello_setuptools'],
}
)
setup-func就是我配置的自定义命令,打包完成后直接在shell中执行 setup-func,就相当于执行appdemo模块下的hello_setuptoolsh函数。
appdemo.py代码:
def hello_setuptools():
print('hello_setuptools')
执行下面命令:
python setup.py bdist_wheel
生成一堆文件:
再执行:
pip install dist/setuptoolsdemo-1.0.0-py3-none-any.whl
将自定义的setuptoolsdemo包安装到Python环境中
ipython中导入执行一下,注意导入的是src,而不是包名setuptoolsdemo
In[2]: from src.appdemo import hello_setuptools
In[3]: hello_setuptools()
hello_setuptools
shell中执行一下setup-func命令:
(python3.7.3) ➜ setup-func
hello_setuptools
可以看到成功打印出了 hello_setuptools。
参考:https://juejin.im/post/5d46eb4bf265da03ef79f7e3
官方文档太长了吧。。。