我的请求看起来很不正统,但我想快速打包一个旧的存储库,主要由 python 可执行脚本组成。
问题在于这些脚本没有被设计为模块,因此其中一些脚本直接在模块顶层执行代码,而另一些则具有 if __name__=='__main__'
部分。
如何使用 setuptools 分发这些脚本,而不需要太多重写?
- 我知道我可以将它们放在
scripts
下setup()
的选项,但不建议这样做,而且它不允许我重命名它们。 - 我想跳过在所有这些脚本中定义
main()
函数,也是因为有些脚本调用奇怪的递归函数,对全局变量有副作用,所以我有点害怕破坏东西。 - 当我尝试仅提供模块名称 console_scripts 时(例如
"myscript=mypkg.myscript"
而不是"myscript=mypkg.myscript:main"
),它在安装后逻辑上提示模块不可调用。<
有没有办法从模块创建脚本?至少当他们有一个 if __name__=='__main__'
?
最佳答案
我刚刚意识到部分答案:
如果模块在顶层执行所有操作,即在导入时,则可以定义一个虚拟的“无操作”main
函数,如下所示:
# Content of mypkg/myscript.py
print("myscript being executed!")
def main():
pass # Do nothing!
这个解决方案仍然会迫使我将此行添加到现有脚本中,但我认为这是一个快速但谨慎的解决方案。
如果代码位于 if __name__=='__main__'
下,则没有解决方案...
关于Python安装工具: quick way to add scripts without "main" function as "console_scripts" entry points,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59591969/