是否可以检查给定的python文件的pyc文件是否有效且是最新的?

问题描述 投票:0回答:1

对于部署到 RO 文件系统的项目,我还想为所有 Python 源代码部署预编译的

.pyc
文件。

感谢

compileall
模块,这已经可以工作了,但是由于复杂的构建机制引起的任何原因,这些
.pyc
文件 can 会意外变得无效(因为不需要的文件修改、源重新定位等)

所以我想做的是检查是否已经为每个创建了一个现有的

pyc
文件,是否找到了它以及它是否有效(即嵌入了正确的源路径,正确的字节码等)。

是否有一种集成的方法来检查“预编译有效性”(如

python3 -m compileall --check
)?或者手动完成此操作的实用方法是什么? (例如通过检查一些痕迹或其他什么)。

我能想到的最可靠的方法是将易于部署的树与我使用

compileall
..

删除并重新创建所有文件的副本进行比较
python python-3.x bytecode precompile pyc
1个回答
0
投票

您可以使用

pydisasm
 附带的名为 
xdis
的反汇编程序查看字节码元数据,使用选项
--format
(或
-F
)选项和
header
:

$ pydisasm --format header xdis/op_imports.pyc
# pydisasm version 6.1.0.dev0
# Python bytecode 3.8.0 (3413)
# Disassembled from Python 3.8.18 (default, Sep  4 2023, 13:19:52) 
# [GCC 12.3.0]
# Timestamp in code: 1708217267 (2024-02-17 19:47:47)
# Source code size mod 2**32: 148 bytes
# Embedded file name: five.py

如果你想从 Python 获取信息,处理 header 的内部例程称为

show_module_header()

请注意,PyPI 上的

xdis
的最新版本已经一年多了,因此请使用 github 上的 代码。事实上,我刚刚修复了此选项的一个错误,该错误阻止显示更多标题信息。

我将于 2024 年 4 月中旬在 BlackHat Asia 演讲,因此我计划在此之前的某个时间发布新的 xdis。

© www.soinside.com 2019 - 2024. All rights reserved.