Python Setuptools:快速添加脚本"main"而无需将函数作为"console_scripts"入口点



我的请求似乎非正统,但我想快速打包一个旧的存储库,主要由python可执行脚本组成。

问题在于这些脚本不是作为模块设计的,因此其中一些直接在模块顶层执行代码,而另一些则具有if __name__=='__main__'部分。

您将如何使用 setuptools 分发这些脚本,而无需进行太多重写?

  • 我知道我可以将它们放在setup()scripts选项下,但不建议这样做,也不允许我重命名它们。
  • 我想跳过在所有这些脚本中定义main()函数,也因为一些脚本调用奇怪的递归函数,对全局变量有副作用,所以我有点害怕破坏东西。
  • 当我尝试仅提供模块名称作为console_scripts(例如"myscript=mypkg.myscript"而不是"myscript=mypkg.myscript:main"(时,它在安装后逻辑上抱怨模块不可调用。

有没有办法从模块创建脚本?至少当他们有if __name__=='__main__'时?

我刚刚意识到部分答案:

在模块在顶层执行所有内容的情况下,即在导入时,因此可以定义一个虚拟的"no-op"main函数,如下所示:

# Content of mypkg/myscript.py
print("myscript being executed!")
def main():
pass  # Do nothing!

这个解决方案仍然会迫使我将这一行添加到现有脚本中,但我认为这是一个快速但谨慎的解决方案。

如果代码处于if __name__=='__main__'之下,则没有解决方案...

您可以使用以下代码。

def main():
pass # or do something
if __name__ == "__main__":
main()

相关内容

  • 没有找到相关文章

最新更新