Python安装工具: quick way to add scripts without "main" function as "console_scripts" entry points

标签 python program-entry-point setuptools entry-point

我的请求看起来很不正统,但我想快速打包一个旧的存储库,主要由 python 可执行脚本组成。

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

如何使用 setuptools 分发这些脚本,而不需要太多重写?

  • 我知道我可以将它们放在 scriptssetup() 的选项,但不建议这样做,而且它不允许我重命名它们。
  • 我想跳过在所有这些脚本中定义 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/

相关文章:

python - python 3.1.3 是否支持 csv 模块中的 unicode?

python - 将数组列转换为 PySpark 数据框中的结构数组

java - Android 在后台工作

java - 我有一个处理图片的Java 程序。它编译并运行,但没有显示任何内容......有人知道出了什么问题吗?

C中调用main函数

python - 软件包的 pip 安装可以从源代码安装,但从软件包安装失败

python - 有没有办法更新一个包,并递归地更新它使用的所有包?

python - 使用 Tensorflow 进行在线学习

python - keras utils 标准化的目的是什么?

python - 使用 python setuptools/setup.py 编译和安装 C 可执行文件?