为什么使用compileall模块生成的.pyc文件或在运行时生成的.pyc文件不同?

时间:2019-05-30 09:00:33

标签: python python-3.x pythoninterpreter

我正在尝试投资python缓存系统。并希望在生成has_many :download_links def download_json self.as_json( only: [:id], methods: [:downloadlink_list] ) end def downloadlink_list self.download_links.pluck(:url) end 文件后验证其哈希值。

.pyc文件具有3个字段:0th-4th字节是幻数,5th-8th字节是时间戳,9th-end字节是编组对象。 我做过一些实验,可以断定具有确切版本的python的同一.pyc文件的.pyc是相等的(不包括时间戳),并且独立于os或体系结构(Intel,ARM)。

如果删除__pycache_目录并运行.py文件,我将得到相同的.py文件。但是如果我要运行.pyc 我会得到一个简短而又不同的$ python3 -m compileall ./文件。

.pyc
#   demo.py
print('importing inc')
import inc
#   inc.py
print('inc Module Loaded')

有什么方法可以使用compileall模块并获得与运行时相同的froike@laptop-roi-x260:~/Pakpaka/scriptsvalidator-python$ rm -R __pycache__/ froike@laptop-roi-x260:~/Pakpaka/scriptsvalidator-python$ python3 demo.py importing inc inc Module Loaded froike@laptop-roi-x260:~/Pakpaka/scriptsvalidator-python$ hexdump ./__pycache__/inc.cpython-36.pyc 0000000 0d33 0a0d 96d0 5cef 0027 0000 00e3 0000 0000010 0000 0000 0000 0000 0200 0000 4000 0000 0000020 7300 000c 0000 0065 0064 0183 0001 0164 0000030 0053 0229 117a 6e69 2063 6f4d 7564 656c 0000040 4c20 616f 6564 4e64 0129 05da 7270 6e69 0000050 a974 7200 0002 0000 0272 0000 fa00 2f33 0000060 6f68 656d 662f 6f72 6b69 2f65 614b 6172 0000070 626d 2f61 6373 6972 7470 7673 6c61 6469 0000080 7461 726f 702d 7479 6f68 2f6e 6e69 2e63 0000090 7970 08da 6d3c 646f 6c75 3e65 0003 0000 00000a0 0073 0000 0000 00000a5 froike@laptop-roi-x260:~/Pakpaka/scriptsvalidator-python$ rm -R __pycache__/ froike@laptop-roi-x260:~/Pakpaka/scriptsvalidator-python$ python3 demo.py importing inc inc Module Loaded froike@laptop-roi-x260:~/Pakpaka/scriptsvalidator-python$ hexdump ./__pycache__/inc.cpython-36.pyc 0000000 0d33 0a0d 96d0 5cef 0027 0000 00e3 0000 0000010 0000 0000 0000 0000 0200 0000 4000 0000 0000020 7300 000c 0000 0065 0064 0183 0001 0164 0000030 0053 0229 117a 6e69 2063 6f4d 7564 656c 0000040 4c20 616f 6564 4e64 0129 05da 7270 6e69 0000050 a974 7200 0002 0000 0272 0000 fa00 2f33 0000060 6f68 656d 662f 6f72 6b69 2f65 614b 6172 0000070 626d 2f61 6373 6972 7470 7673 6c61 6469 0000080 7461 726f 702d 7479 6f68 2f6e 6e69 2e63 0000090 7970 08da 6d3c 646f 6c75 3e65 0003 0000 00000a0 0073 0000 0000 00000a5 froike@laptop-roi-x260:~/Pakpaka/scriptsvalidator-python$ rm -R __pycache__/ froike@laptop-roi-x260:~/Pakpaka/scriptsvalidator-python$ python3 -m compileall inc.py Compiling 'inc.py'... froike@laptop-roi-x260:~/Pakpaka/scriptsvalidator-python$ hexdump ./__pycache__/inc.cpython-36.pyc 0000000 0d33 0a0d 96d0 5cef 0027 0000 00e3 0000 0000010 0000 0000 0000 0000 0200 0000 4000 0000 0000020 7300 000c 0000 0065 0064 0183 0001 0164 0000030 0053 0229 117a 6e69 2063 6f4d 7564 656c 0000040 4c20 616f 6564 4e64 0129 05da 7270 6e69 0000050 a974 7200 0002 0000 0272 0000 fa00 6906 0000060 636e 702e da79 3c08 6f6d 7564 656c 033e 0000070 0000 7300 0000 0000 0000078 文件?

谢谢!

0 个答案:

没有答案