我刚刚使用setuptools进行打包,似乎安装python脚本和一个模块的推荐方法是指定一个调用函数名称的脚本名称,如下所示:
setup(
# ...
entry_points = {
"console_scripts": [
"script_name": "project.main:main",
],
}
)
Run Code Online (Sandbox Code Playgroud)
这显然排除了制作python模块可执行文件的标准方法,这是(我上次检查,不久之前)使用的if __name__ == "__main__": do_stuff().setuptools是否支持这种风格,还是应该切换到定义主函数并在entry_points中指定它?
它是:"script_name = project.main:do_stuff 使用setuptools
Setuptools创建名为script_name导入和运行函数project.main:do_stuff的脚本,而不是直接运行脚本.您应该重新阅读setuptools docs的这一部分(备用链接,如果您使用Distribute)来理解为什么会这样.它创建的脚本if __name__ == "__main__"仍然包含.所以,是的,这仍然是使其执行的事实方式.
这是使用setuptools安装的easy_install的副本
#!/usr/bin/python
# EASY-INSTALL-ENTRY-SCRIPT: 'distribute==0.6.14','console_scripts','easy_install'
__requires__ = 'distribute==0.6.14'
import sys
from pkg_resources import load_entry_point
if __name__ == '__main__':
sys.exit(
load_entry_point('distribute==0.6.14', 'console_scripts', 'easy_install')()
)
Run Code Online (Sandbox Code Playgroud)
我认为最好定义一个类似于easy_install的入口点和脚本.导入并使用入口点,就像您在示例中显示的那样if __name__ == "__main__": do_stuff().它非常适合调试和早期测试,如果你使用distutils,也不需要添加/更改任何东西.您还可以使用另一个应用程序调用do_stuff()来访问您的应用程序,而无需在shell中运行它,这就是setuptools正在做的事情,distutils copy是脚本.
| 归档时间: |
|
| 查看次数: |
1479 次 |
| 最近记录: |