My request seems unorthodox, but I would like to quickly package an old repository, consisting mostly of python executable scripts.
The problem is that those scripts were not designed as modules, so some of them execute code directly at the module top-level, and some other have the if __name__=='__main__'
part.
How would you distribute those scripts using setuptools, without too much rewrite?
scripts
option of setup()
, but it's not advised, and also it doesn't allow me to rename them.main()
function in all those scripts, also because some scripts call weird recursive functions with side effects on global variables, so I'm a bit afraid of breaking stuff."myscript=mypkg.myscript"
instead of "myscript=mypkg.myscript:main"
), it logically complains after installation that a module is not callable.Is there a way to create scripts from modules? At least when they have a if __name__=='__main__'
?
There's some design considerations, but I would recommend using a __main__.py for this.
__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__")
Then, you can set your_package.__main__:execute_script
as a console script in setup.py/pyproject.toml. You can obviously have as many scripts as you like this way.