Python字节码兼容性
Python的字节码在不同版本之间的兼容性有多强呢?我不是在说Python2.x和Python3.x之间的兼容性,而是像Python3.3和Python3.4之间的情况。
我并不是出于“安全性”的考虑,我使用Cython把大部分程序转换成C语言。不过,我确实使用pyc文件来存储一些常量,pyc文件更好,因为它的格式不容易被非官方地修改。如果有人想要更改什么,可以通过内部流程来请求。
这样的pyc文件只包含一些变量,比如整数、浮点数、列表、字典和字符串。在里面有一个类,但它更像是一个容器或者结构体。
这样做是个大忌,还是说可以试试看,因为里面存储的只是一些非常基础的Python字节码数据呢?
1 个回答
8
Python 不保证不同版本之间的字节码兼容性,所以不要依赖这一点。
实际上,pyc 文件的开头有一个特殊的数字,这个数字会随着每次代码的变化而改变,Python 会检查这个数字来判断兼容性。由于这个代码几乎每个版本都会变,所以这个特殊数字也会随之改变。想了解更多细节,可以查看 Ned Batchelder 的博客。
还有更好的方法来确保你的文件没有被篡改,比如使用校验和。