对于部署到 RO 文件系统的项目,我还想为所有 Python 源代码部署预编译的
.pyc
文件。
感谢
compileall
模块,这已经可以工作了,但是由于复杂的构建机制引起的任何原因,这些 .pyc
文件 can 会意外变得无效(因为不需要的文件修改、源重新定位等)
所以我想做的是检查是否已经为每个创建了一个现有的
pyc
文件,是否找到了它以及它是否有效(即嵌入了正确的源路径,正确的字节码等)。
是否有一种集成的方法来检查“预编译有效性”(如
python3 -m compileall --check
)?或者手动完成此操作的实用方法是什么? (例如通过检查一些痕迹或其他什么)。
我能想到的最可靠的方法是将易于部署的树与我使用
compileall
..删除并重新创建所有文件的副本进行比较
您可以使用
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。