[Python-Dev] #12982: Should -O be required to *read* .pyo files?

Ethan Furman ethan at stoneleaf.us
Wed Jun 13 21:36:55 CEST 2012


R. David Murray wrote:
> On Wed, 13 Jun 2012 20:46:50 +0200, Antoine Pitrou <solipsis at pitrou.net> wrote:
>> On Wed, 13 Jun 2012 11:20:24 -0700
>> Toshio Kuratomi <a.badger at gmail.com> wrote:
>>> On Wed, Jun 13, 2012 at 01:58:10PM -0400, R. David Murray wrote:
>>>> OK, but you didn't answer the question :).  If I understand correctly,
>>>> everything you said applies to *writing* the bytecode, not reading it.
>>>>
>>>> So, is there any reason to not use the .pyo file (if that's all that is
>>>> around) when -O is not specified?
>>>>
>>>> The only technical reason I can see why -O should be required for a .pyo
>>>> file to be used (*if* it is the only thing around) is if it won't *run*
>>>> without the -O switch.  Is there any expectation that that will ever be
>>>> the case?
>>>>
>>> Yes.  For instance, if I create a .pyo with -OO it wouldn't have docstrings.
>>> Another piece of code can legally import that and try to use the docstring
>>> for something.  This would fail if only the .pyo was present.
>> Not only docstrings, but also asserts. I think running a pyo without -O
>> would be a bug.
> 
> Again, a program that depends on asserts is buggy.
> 
> As Ethan pointed out we are asking about the case where someone is
> *deliberately* setting the .pyo file up to be run as the "normal"
> case.
> 
> I'm not sure we want to support that, I just want us to be clear
> about why we don't :)

Currently, the alternative to supporting this behavior is to either:

   1) require the end-user to specify -O (major nuisance)

   or

   2) have the distributor rename the .pyo file to .pyc

I think 1 is a non-starter (non-finisher? ;) but I could live with 2 -- 
after all, if someone is going to the effort of removing the .py file 
and moving the .pyo file into its place, renaming the .pyo to .pyc is 
trivial.

So the question, then, is: is option 2 better than just supporting .pyo 
files without -O when they are all that is available?

~Ethan~


More information about the Python-Dev mailing list