What will happen if I modify a Python script while it's running?

Solution 1:

Nothing, because Python precompiles your script into a PYC file and launches that.

However, if some kind of exception occurs, you may get a slightly misleading explanation, because line X may have different code than before you started the script.

Solution 2:

When you run a python program and the interpreter is started up, the first thing that happens is the following:

  • the module sys and builtins is initialized
  • the __main__ module is initialized, which is the file you gave as an argument to the interpreter; this causes your code to execute

When a module is initialized, it's code is run, defining classes, variables, and functions in the process. The first step of your module (i.e. main file) will probably be to import other modules, which will again be initialized in just the same way; their resulting namespaces are then made available for your module to use. The result of an importing process is in part a module (python-) object in memory. This object does have fields that point to the .py and .pyc content, but these are not evaluated anymore: module objects are cached and their source never run twice. Hence, modifying the module afterwards on disk has no effect on the execution. It can have an effect when the source is read for introspective purposes, such as when exceptions are thrown, or via the module inspect.

This is why the check if __name__ == "__main__" is necessary when adding code that is not intended to run when the module is imported. Running the file as main is equivalent to that file being imported, with the exception of __name__ having a different value.


Sources:

  • What happens when a module is imported: The import system
  • What happens when the interpreter starts: Top Level Components
  • What's the __main__ module: __main__- Top-level code environment