简体   繁体   中英

What's the best practice for writing an “execute only” Python module?

I have a Python module that is intended exclusively for running as a script and never as something that should be imported, and I'd like to enforce (and communicate) that intention in my code.

What is the best practice for accomplishing this?


I can imagine a few options such as wrapping the whole file in

if __name__ == '__main__':
    # All the code in the module

or aborting at the start

if __name__ != '__main__':
    exit()

# All the code in the module

perhaps with a warning

if __name__ != '__main__':
    print('You should not import this')
    exit()

# All the code in the module

or even an assertion

assert __name__ == '__main__', 'You should not import this'

But I'm not sure which (if any) is appropriate, stylistically or technically.

While you indeed can do

if __name__ != '__main__':
    raise ImportError(...)
    # or maybe just emit a warning

it may stand in your feet the other day.

At least, you should keep the functions, classes and other definitions alone - they don't do any harm and maybe you or someone else needs them later.

If you import a module which just exposes functions and classes and values without doing output or other things, all you lose is some milliseconds.

Instead, you should put the code which executes on startup into a function ( main() ?) and execute that in the usual manner.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM