4

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?

  • I know I could just put them under the scripts option of setup(), but it's not advised, and also it doesn't allow me to rename them.
  • I would like to skip defining a 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.
  • When I try providing only the module name as console_scripts (e.g "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__'?

PlasmaBinturong
  • 2,122
  • 20
  • 24

2 Answers2

2

I just realised part of the answer:

in the case where the module executes everything at the top-level, i.e. on import, it's therefore ok to define a dummy "no-op" main function, like so:

# Content of mypkg/myscript.py

print("myscript being executed!")

def main():
    pass  # Do nothing!

This solution will still force me to add this line to the existing scripts, but I think it's a quick but cautious solution.

No solution if the code is under a if __name__=='__main__' though...

PlasmaBinturong
  • 2,122
  • 20
  • 24
-2

You can use the following codes.

def main():
    pass # or do something

if __name__ == "__main__":
    main()