Pla*_*ong 7 python program-entry-point setuptools entry-point
我的请求看起来很不正统,但我想快速打包一个旧的存储库,主要由 python 可执行脚本组成。
问题在于这些脚本没有被设计为模块,因此其中一些脚本直接在模块顶层执行代码,而另一些脚本则具有该部分if __name__=='__main__'。
您将如何使用 setuptools 分发这些脚本而不需要太多重写?
scripts的选项下setup(),但不建议这样做,而且它也不允许我重命名它们。main()在所有这些脚本中定义函数,也是因为有些脚本调用奇怪的递归函数,对全局变量有副作用,所以我有点害怕破坏东西。"myscript=mypkg.myscript"而不是"myscript=mypkg.myscript:main")时,它在安装后逻辑上抱怨模块不可调用。有没有办法从模块创建脚本?至少当他们有一个if __name__=='__main__'?
有一些设计注意事项,但我建议为此使用 __main__.py 。
__main__.py
from pathlib import Path
from runpy import run_path
pkg_dir = Path(__file__).resolve().parent
def execute_script():
script_pth = pkg_dir / "local path to script"
run_path(str(script_pth), run_name="__main__")
Run Code Online (Sandbox Code Playgroud)
然后,您可以your_package.__main__:execute_script在 setup.py/pyproject.toml 中设置为控制台脚本。显然,您可以通过这种方式拥有任意数量的脚本。
| 归档时间: |
|
| 查看次数: |
1447 次 |
| 最近记录: |