В мрачные и древние дни 2003 года появился PEP 304, чтобы решить эту проблему. Его патч был найден бессмысленным. Зависимости среды от платформы и перекосы версий порвали ее в клочья и оставили разбросанные по пустошам биты.
После многих лет страданий в последние дни 2009 года поднялся новый претендент. Барри Варшава вызвал PEP 3147 и отправил его в бой, используя простое оружие с умением. PEP уничтожил загроможденные файлы PYC, заставил замолчать интерпретатора Unladen Swallow и CPython, каждый из которых пытался доказать, что его файл PYC должен быть триумфальным, и позволил Python успокоиться с его мертвыми призраками, иногда работающими в глубокой ночи. ОПТОСОЗ 3147 был признан диктатором достойным и был посвящен в официальные роли в дни 3.2.
Начиная с 3.2, Python хранит файлы PYC модуля в __pycache__
в каталоге модуля. Каждый файл PYC содержит имя и версию интерпретатора, например, __pycache__/foo.cpython-33.pyc
. Вы также можете иметь __pycache__/foo.cpython-32.pyc
, скомпилированный более ранней версией Python. Происходит правильное волшебство: правильное используется и перекомпилируется, если не синхронизировано с исходным кодом. Во время выполнения посмотрите в модуле mymodule.__cached__
имя файла pyc и проанализируйте его с помощью imp.get_tag()
. См. раздел «Что нового» * 1015 * для получения дополнительной информации.
TL; DR - Просто работает в Python 3.2 и выше. Плохие хаки заменяют версии до этого.