我的请求似乎非正统,但我想快速打包一个旧的存储库,主要由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()