Am 27.07.2011 03:32, schrieb harrismh777:
> Christian Heimes wrote:
>> The first four bytes of a pyc file contain the magic header. It must
>> match the magic of the current Python version. The next four bytes
>> contain the pyc_mtime. It must match the mtime of the corresponding .py
>> files as returned by fstat().st_mtime. If the magic doesn't match or the
>> mtime header doesn't match the mtime of the .py file, the pyc is ignored.
> 
>     ... so recompile is required to fix.

It's not required, you can fake a .py file with a trick:

>>> import os, struct, datetime

First get the magic and mtime from the pyc file

>>> with open("test.pyc", "rb") as f:
...     header = f.read(8)
...
>>> magic, mtime = struct.unpack("ii", header)
>>> magic, mtime
(168686339, 1311717735)

Verify it's a good date

>>> datetime.datetime.fromtimestamp(mtime)
datetime.datetime(2011, 7, 27, 0, 2, 15)

Now create an empty test.py

>>> open("test.py", "w").close()

Set its mtime

>>> os.utime("test.py", (mtime, mtime))

Now the test.py has the same mtime as test.pyc and Python won't
recompile the .pyc file from the .py file as long as the magic header
(168686339) is correct.

Christian

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to