Python 3.3 and .pyo files

Steven D'Aprano steve+comp.lang.python at pearwood.info
Sat Sep 22 09:21:00 EDT 2012


On Fri, 21 Sep 2012 22:46:08 -0400, Terry Reedy wrote:

> On 9/21/2012 5:10 AM, Marco wrote:
>> I was trying to import a pyo module in Python 3.3, but Python does not
>> find it:
> 
> You appear to be trying to *run*, not *import* a .pyo module.

Marco is using the standard mechanism for finding, importing, and running 
a module. I don't believe his use of -m should be a problem. It works in 
3.2, and it works with .pyc files in 3.3, I see nothing to suggest it 
shouldn't work with .pyo files in 3.3.


>> $ echo "print(__file__)" > foo.py
>> $ python3.3 -O -m foo
> 
> Since foo.py is in the current directory, I am not sure why you use '-m
> foo' instead of 'foo.py'. -m is for running a module somewhere on
> sys.path.

Yes, and the current directory is on sys.path.

I would be astonished if python -m could not find a module that happened 
to be in the current directory.


[...]
> Also, the
> -O is sort of redundant, or perhaps interfering, since its usual effect
> to to say 'get and put, from and to the cache, .pyo instead of .pyc'.

No it is not redundant. You link specifically to an bug tracker issue 
below where is is clearly decided that if you want to run a .pyo file you 
*must* use the -O switch. (I approve of this decision.)


>> /usr/local/bin/python3.3: No module named foo
>>
>> How come? Thanks in advance, Marco
> 
> You might read some of http://bugs.python.org/issue12982
> 
> in particular, from http://bugs.python.org/issue12982#msg162814

Whose words are these following?


> Python interpreters exist to run Python code. The existence,
> persistence, and other details of compilation caches are
> version-dependent implementation details. Being able to execute from
> such caches without source present is also an implementation detail, and
> for CPython, it gets secondary support at best. (This is a compromise
> between full support and no support.)"

I'm not sure if these are your words, or if you are quoting some random 
commenter on the pydev list, or one of the lead developers who might 
actually know what he is talking about.

As I recall, some time in the recent past Guido came down *hard* against 
the suggestion that support for running sourceless files (.pyc and .pyo) 
should be dropped. Even if I'm misremembering, it is the case that the 
Python 3.3 will find and run a .pyc file, but not a .pyo file. There's a 
new candidate release of 3.3 due out over the next couple of days. If it 
shows the same behaviour, it should be reported as a bug.



-- 
Steven



More information about the Python-list mailing list