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