Python *.py, *.pyo, *.pyc: 在嵌入式系统中哪个可以去掉?
为了在我正在使用的嵌入式系统中节省有限的文件存储空间,我想删除一些可以合理移除的文件,而不会对功能或性能产生重大影响。在Python库中,*.py、*.pyo和*.pyc文件占用了相当大的空间。我在想,对于一个小型嵌入式系统中的Python 2.6安装,以下哪种选择最合理:
- 保留*.py文件,删除*.pyc和*.pyo(这样可以调试,但性能会受影响吗?)
- 保留*.py和*.pyc文件,删除*.pyo(优化真的有用吗?)
- 保留*.pyc文件,删除*.pyo和*.py(这样可行吗?)
- 保留*.py、*.pyc和*.pyo文件(都需要吗?)
5 个回答
我建议只保留 .py 文件。启动时间的差别其实不大,保留源代码是个好处,因为它可以在不同的 Python 版本下正常运行,不会有问题。
从 Python 2.6 开始,如果把 sys.dont_write_bytecode 设置为 True,就可以完全不生成 .pyc 和 .pyo 文件了。如果你有 2.6 版本的话,可以考虑使用这个选项。
第三种方法应该可以用,而且一定能用。你不需要 .pyo 或 .py 文件就能使用编译后的 Python 代码。
http://www.network-theory.co.uk/docs/pytut/CompiledPythonfiles.html
当你用 -O 这个选项启动 Python 解释器时,它会生成优化过的代码,并把这些代码存储在以 ‘.pyo’ 结尾的文件里。不过,现在的优化器帮助不大,它只会去掉一些断言语句。
如果你用两个 -O 选项启动 Python 解释器,也就是 -OO,字节码编译器会进行一些优化,这在极少数情况下可能会导致程序出错。目前,它只会把文档字符串(doc strings)从字节码中去掉,这样生成的 ‘.pyo’ 文件会更小。
我对你的建议是?
如果你不需要断言语句和文档字符串,可以用 -OO 选项只编译成 .pyo 文件。
否则,就只用 .pyc 文件吧。
补充说明
我注意到你只提到了 Python 库。如果你只需要部分功能,很多 Python 库是可以去掉的。
我还建议你看看 tinypy,它是 Python 的一个大部分功能的简化版,只有大约 64kb 大小。