Message313140
'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. |
|
Date |
User |
Action |
Args |
2018-03-02 17:13:39 | terry.reedy | set | recipients:
+ terry.reedy |
2018-03-02 17:13:39 | terry.reedy | set | messageid: <1520010819.42.0.467229070634.issue32984@psf.upfronthosting.co.za> |
2018-03-02 17:13:39 | terry.reedy | link | issue32984 messages |
2018-03-02 17:13:39 | terry.reedy | create | |
|