This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author terry.reedy
Recipients terry.reedy
Date 2018-03-02.17:13:39
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <>
'python' sets main.__file__ to ''. 'python' leaves __file__ unset.  If PYTHONSTARTUP is set to, 'python' executes in main with __file__ set to '', then unsets __file__ before the >>> prompt, as if somefile has not been executed.  Any explicit setting of __file__ in somefile is undone.
print(__name__, __file__)
__file__ = ''

> F:\dev\3x> set PYTHONSTARTUP=f:/python/a/
> F:\dev\3x> python
__main__ f:/python/a/
>>> __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/', NameError is raised for the print in This was reported this SO question. 

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 as fp:
                source =

My guess is that wrapping the source with f"__file__ = {filename}\n" and "del __file__\n" should work.
Date User Action Args
2018-03-02 17:13:39terry.reedysetrecipients: + terry.reedy
2018-03-02 17:13:39terry.reedysetmessageid: <>
2018-03-02 17:13:39terry.reedylinkissue32984 messages
2018-03-02 17:13:39terry.reedycreate