[Python-Dev] Criticism of execfile() removal in Python3
Steven D'Aprano
steve at pearwood.info
Tue Jun 10 05:03:03 CEST 2014
On Tue, Jun 10, 2014 at 05:23:12AM +0300, Paul Sokolovsky wrote:
> execfile() builtin function was removed in 3.0. This brings few
> problems:
>
> 1. It hampers interactive mode - instead of short and easy to type
> execfile("file.py") one needs to use exec(open("file.py").read()).
If the amount of typing is the problem, that's easy to solve:
# do this once
def execfile(name):
exec(open("file.py").read())
Another possibility is:
os.system("python file.py")
> 2. Ok, assuming that exec(open().read()) idiom is still a way to go,
> there's a problem - it requires to load entire file to memory. But
> there can be not enough memory. Consider 1Mb file with 900Kb comments
> (autogenerated, for example). execfile() could easily parse it, using
> small buffer. But exec() requires to slurp entire file into memory, and
> 1Mb is much more than heap sizes that we target.
There's nothing stopping alternative implementations having their own
implementation-specific standard library modules.
steve at orac:/home/s$ jython
Jython 2.5.1+ (Release_2_5_1, Aug 4 2010, 07:18:19)
[OpenJDK Server VM (Sun Microsystems Inc.)] on java1.6.0_27
Type "help", "copyright", "credits" or "license" for more information.
>>> import java
>>>
So you could do this:
from upy import execfile
execfile("file.py")
So long as you make it clear that this is a platform specific module,
and don't advertise it as a language feature, I see no reason why you
cannot do that.
--
Steven
More information about the Python-Dev
mailing list