gpt4 book ai didi

python - python 的 setuptools 是否支持 `__name__ == "__main_ _"` 执行方式?

转载 作者:太空狗 更新时间:2023-10-29 20:22:06 25 4
gpt4 key购买 nike

我刚刚开始使用 setuptools 进行打包,似乎推荐的安装 python 脚本和一个模块的方法是指定一个调用函数名称的脚本名称,如下所示:

setup(
# ...
entry_points = {
"console_scripts": [
"script_name": "project.main:main",
],
}
)

这显然排除了使 python 模块可执行的标准方法,即(上次我检查时,那是前一段时间)使用 if __name__ == "__main__": do_stuff() . setuptools 是否支持这种风格,或者我应该切换到定义一个 main 函数并在 entry_points 中指定它?

最佳答案

它是:"script_name = project.main:do_stuff with setuptools

Setuptools 创建名为 script_name 的脚本,导入并运行函数 project.main:do_stuff,而不是直接运行脚本。你应该重新阅读 this part ( alternate link ,如果您使用 Distribute)再次查看 setuptools 文档以了解为什么会这样。它创建的脚本仍然包含 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')()
)

我认为最好定义一个入口点和一个类似easy_install的脚本。导入并使用入口点,就像您在示例中显示的那样 if __name__ == "__main__": do_stuff()。它非常适合调试和早期测试,如果您使用 distutils 也是如此。 ,无需添加/更改任何内容。您还可以让另一个应用程序调用 do_stuff() 来访问您的应用程序,而无需在 shell 中运行它,这就是 setuptools 正在做的事情,distutils 复制脚本。

关于python - python 的 setuptools 是否支持 `__name__ == "__main_ _"` 执行方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5615292/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com