python - 仅当 __name__ == "__main__" 时才从 setuptools 运行设置功能?
问题描述
仅当模块实际运行时,我才想在 setup.py 中运行 setup() 。所以我想做类似的事情:
from setuptools import setup
def somefunction():
...
if __name__ == "__main__":
setup(...)
(我想在文件构建过程中使用的另一个 python 脚本中使用文件中定义的一些函数,这些函数在 setup() 调用中使用)
这可能吗?不允许?灰心?为什么?
我找不到任何关于此的文档,但奇怪的是,所有示例都没有使用“ main ”的测试,所以我想知道是否有任何使用这个问题的东西。
解决方案
call周围的守卫setup()
在实践中并不常见,因为这个文件通常不被导入。众所周知,它是一个安装程序脚本,旨在直接执行。
但是,您可以出于上述原因(“我想使用文件中定义的一些函数”)添加保护,并且 distutils/setuptools 中的所有内容都应该可以正常工作。在脚本中定义库函数有点不寻常setup.py
,因此您可能会问自己是否有更好的归宿来存放此类函数,而不是直接在安装程序脚本本身中编写它们。
这可能吗?
是的。
不允许?
不。
灰心?
有点基于意见。就个人而言,我会说是的:不鼓励这样做。
为什么?
的工作setup.py
是从源代码分发版安装您的代码。它通常不是其他随机任务的所在地,例如构建过程的文档。这个文件甚至不会包含在wheel 发行版中,这可能是当今部署 Python 代码的更典型的方式。
最后一点:如果并且当您使用声明式构建系统转向现代 Python 打包实践时pyproject.toml
,将没有脚本。那么无论如何,你将不得不为这些辅助功能找到一个新家。setup.py
推荐阅读
- c++ - std::chrono::from_stream 可以以微秒精度将字符串转换为 time_point 吗?
- java - 如何传递到请求文件列表
- python - Tweepy API doesn't download all tweets
- android - 为什么我不能在这个 recyclerview 适配器中设置 setOnLongClick?
- python - 熊猫数据框中的多个条件操作
- java - PreparedStatement (Java) using Oracle SDO_RELATE()
- cucumber - how to run cucumber test after generating artifact?
- javascript - How can i add bootstrap popover to w2grid custom button?
- c# - UWP Windows.Devices.PointOfService: Connecting to a previously saved device id works but there's no barcode scanning event
- python - 加载组件 rasa 失败