New submission from Terry J. Reedy <tjre...@udel.edu>: 'python somefile.py' sets main.__file__ to 'somefile.py'. 'python' leaves __file__ unset. If PYTHONSTARTUP is set to somefile.py, 'python' executes somefile.py in main with __file__ set to 'somefile.py', then unsets __file__ before the >>> prompt, as if somefile has not been executed. Any explicit setting of __file__ in somefile is undone.
tem2.py: print(__name__, __file__) __file__ = 'abc.py' > F:\dev\3x> set PYTHONSTARTUP=f:/python/a/tem2.py > F:\dev\3x> python ... __main__ f:/python/a/tem2.py >>> __file__ Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name '__file__' is not defined With IDLE, when 'python -m idlelib.idle' is run with '-s' or '-r f:/python/a/tem2.py', NameError is raised for the print in tem2.py. This was reported this SO question. https://stackoverflow.com/questions/49054093/cannot-use-file-when-opening-module-in-idle In both cases, the file is run with execfile(filename). def execfile(self, filename, source=None): "Execute an existing file" if source is None: with tokenize.open(filename) as fp: source = fp.read() My guess is that wrapping the source with f"__file__ = {filename}\n" and "del __file__\n" should work. ---------- assignee: terry.reedy components: IDLE messages: 313140 nosy: terry.reedy priority: normal severity: normal stage: needs patch status: open title: IDLE: set and unset __file__ for startup files type: behavior versions: Python 3.6, Python 3.7, Python 3.8 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue32984> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com