[Python-Dev] #12982: Should -O be required to *read* .pyo files?
Ethan Furman
ethan at stoneleaf.us
Tue Jun 12 20:41:52 CEST 2012
Terry Reedy wrote:
> http://bugs.python.org/issue12982
>
> Currently, cpython requires the -O flag to *read* .pyo files as well as
> the write them. This is a nuisance to people who receive them from
> others, without the source. The originator of the issue quotes the
> following from the doc (without giving the location).
>
> "It is possible to have a file called spam.pyc (or spam.pyo when -O is
> used) without a file spam.py for the same module. This can be used to
> distribute a library of Python code in a form that is moderately hard to
> reverse engineer."
>
> There is no warning that .pyo files are viral, in a sense. The user has
> to use -O, which is a) a nuisance to remember if he has multiple scripts
> and some need it and some not, and b) makes his own .py files used with
> .pyo imports cached as .pyo, without docstrings, like it or not.
>
> Currently, the easiest workaround is to rename .pyo to .pyc and all
> seems to work fine, even with a mixture of true .pyc and renamed .pyo
> files. (The same is true with the -O flag and no renaming.) This
> suggests that there is no current reason for the restriction in that the
> *execution* of bytecode is not affected by the -O flag. (Another
> workaround might be a custom importer -- but this is not trivial,
> apparently.)
>
> So is the import restriction either an accident or obsolete holdover? If
> so, can removing it be treated as a bugfix and put into current
> releases, or should it be treated as an enhancement only for a future
> release?
>
> Or is the restriction an intentional reservation of the possibility of
> making *execution* depend on the flag? Which would mean that the
> restriction should be kept and only the doc changed?
I have no history so cannot say what was supposed to happen, but my
$0.02 would be that if -O is *not* specified then we should try to read
.pyc, then .pyo, and finally .py. In other words, I vote for -O being a
write flag, not a read flag.
~Ethan~
More information about the Python-Dev
mailing list