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

Steven D'Aprano steve at pearwood.info
Thu Jun 14 05:12:16 CEST 2012


On Wed, Jun 13, 2012 at 03:13:54PM -0400, R. David Murray wrote:

> 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.

You can't be sure that the .pyo file is there due to *deliberate* 
choice. It may be accidental. Perhaps the end user has ignorantly 
deleted the .pyc file, but failed to delete the .pyo file. Perhaps the 
developer has merely made a mistake.

Under current behaviour, deleting the .pyc file shouldn't matter:

- if the source file is available, that will be used
- if not, a clear error is raised

Under the proposed change:

- if the source file is *newer* than the .pyo file, it will be used
- but if it is missing or older, the .pyo file is used

This opens a potential mismatch between the code I *think* is being run, 
and the actual code being run: I think the .py[c] code is running when 
the .pyo is actually running.

Realistically, we should expect that most people don't *sufficiently* 
test their apps under -O (if at all!) even if they are aware that there 
are differences in behaviour. I know I don't, and I know I should. This 
is just a matter of priority: testing without -O is a higher priority 
for me than testing with -O and -OO.

The consequence is that I may then receive a mysterious bug report that 
I can't duplicate, because the user correctly reports that they are 
running *without* -O, but unknown to anyone, they are actually running 
the .pyo file.


> I'm not sure we want to support that, I just want us to be clear
> about why we don't :)

If I receive a bug report that only occurs under -O, then I immediately 
suspect that the bug has something to do with assert.

If I receive a bug report that occurs without -O, under the proposed 
change I can't be sure with the optimized code or standard code is 
running. That adds complexity and confusion.


-- 
Steven


More information about the Python-Dev mailing list