首页 > 解决方案 > 仅当 __name__ == "__main__" 时才从 setuptools 运行设置功能?

问题描述

仅当模块实际运行时,我才想在 setup.py 中运行 setup() 。所以我想做类似的事情:

from setuptools import setup

def somefunction():
    ...

if __name__ == "__main__":
    setup(...)

(我想在文件构建过程中使用的另一个 python 脚本中使用文件中定义的一些函数,这些函数在 setup() 调用中使用)

这可能吗?不允许?灰心?为什么?

我找不到任何关于此的文档,但奇怪的是,所有示例都没有使用“ main ”的测试,所以我想知道是否有任何使用这个问题的东西。

标签: pythonpython-3.xsetuptoolssetup.py

解决方案


call周围的守卫setup()在实践中并不常见,因为这个文件通常不被导入。众所周知,它是一个安装程序脚本,旨在直接执行。

但是,您可以出于上述原因(“我想使用文件中定义的一些函数”)添加保护,并且 distutils/setuptools 中的所有内容都应该可以正常工作。在脚本中定义库函数有点不寻常setup.py,因此您可能会问自己是否有更好的归宿来存放此类函数,而不是直接在安装程序脚本本身中编写它们。

这可能吗?

是的。

不允许?

不。

灰心?

有点基于意见。就个人而言,我会说是的:不鼓励这样做。

为什么?

的工作setup.py是从源代码分发版安装您的代码。它通常不是其他随机任务的所在地,例如构建过程的文档。这个文件甚至不会包含在wheel 发行版中,这可能是当今部署 Python 代码的更典型的方式。

最后一点:如果并且当您使用声明式构建系统转向现代 Python 打包实践时pyproject.toml,将没有脚本。那么无论如何,你将不得不为这些辅助功能找到一个新家。setup.py


推荐阅读