命令行脚本¶
很多Python包都有命令行工具. 借助setuptools/PyPI你可以非常方便地添加有用的命令行工具到你发布包当中, 或者你想单纯发布使用Python编写 的命令行工具.
举个例子, 我们添加一个 funniest-joke
的可执行命令.
在 setuptools.setup()
中有两种方法 scripts
参数或是 console_scripts
入口.
scripts
参数¶
第一种方法是把你的命令写在一个单独的文件中:
funniest/
funniest/
__init__.py
...
setup.py
bin/
funniest-joke
...
bin/funniest-joke
如下:
#!/usr/bin/env python
import funniest
print funniest.joke()
在``setup()`` 添加:
setup(
...
scripts=['bin/funniest-joke'],
...
)
当我们安装这个包的时候, setuptools会把你的脚本复制到PATH路径下:
$ funniest-joke
使用这种方法的好处是可以使用非Python的语言的编写, funniset-joke
可以是一个shell脚本或者其他的都可以.
console_scripts
入口¶
第二种方法是通过’entry point’. setuptools 允许模块注册’entry points’, 这样可以使用其他包的功能. console_scripts
也是一个’entry points’.
console_scripts
允许Python的 functions (不是文件) 直接被注册成一个命令行工具.
下面, 我们将添加一个新文件提供命令行工具:
funniest/
funniest/
__init__.py
command_line.py
...
setup.py
...
command_line.py
仅仅只提供命令行工具(这样组织代码更方便):
import funniest
def main():
print funniest.joke()
你可以测试一下, 就像这样:
$ python
>>> import funniest.command_line
>>> funniest.command_line.main()
...
在setup.py 中 注册 main()
setup(
...
entry_points = {
'console_scripts': ['funniest-joke=funniest.command_line:main'],
}
...
)
我们安装了这个包之后, 我们就可以直接使用 funniest-joke
命令. 因为setuptools 会自动生成一个脚本, 包括导入模块, 然后在调用注册的函数.