python中可复制的构建

2024-06-28 16:08:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要发布一个python脚本的编译版本,并能够证明(使用哈希)编译的文件确实与原始文件相同。在

到目前为止,我们使用的是一个简单的:

find . -name "*.py" -print0 | xargs -0 python2 -m py_compile

问题是这是不可复制的(不确定波动的因素是什么,但是2次执行不会为同一个python文件提供相同的.pyc),并迫使我们始终发布相同的编译版本,而不是仅仅将构建脚本提供给任何人以生成新的编译版本。在

有没有办法做到这一点?在

谢谢


Tags: 文件namepy版本脚本证明find因素
2条回答

2019/python3.7+更新:自PEP 552

python -m compileall -f  invalidation-mode=checked-hash [file|dir]
# or
export SOURCE_DATE_EPOCH=1 # set py_compile to use 
python -m py_compile       # pycompile.PycInvalidationMode.CHECKED_HASH

将创建.pycs,在其源代码更改之前不会更改。在

编译的Python文件包括一个4字节的幻数和4字节的编译日期时间。这可能是你所看到的差异的原因。在

如果在校验和过程中省略了字节5-8,那么应该可以看到给定版本的Python的常量校验和。在

.pyc文件的格式由Ned Batchelder在this blog post中给出。在

相关问题 更多 >