python的字节码与运行

在用py2exe打包时,把所有的package都打包进libs.zip,然后把sys.path中加入“libs.zip”,这样可以使发布文件更紧凑,在这个过程中,发现有如下关于字节码的问题需要注意:

假设一个python程序文件有如下的结构:
main.py(内部import mudule)
module.py
则,
(1)python main.py会生成module.pyc,但是不会生成main.pyc
同样python -O main.py会生成module.pyo,但是不会生成main.pyo
(2)用python -O main.py时,只生成module.pyo,并不是如想象中那样生成module.pyc。 pyc和pyo文件没有关系。pyc和pyo都必须从py文件生成。
(3)如果只有main.py 和module.pyo的话,那么必须用python -O main.py才能运行,否则就找不到module,同样,如果只有main.py 和module.pyc的话,python main.py可以运行,但是python -O main.py则会出找不到module的错,如(2)中所说,并不会从pyc文件生成pyo文件。
(4)main.py生成的pyc,pyo字节码运行需求和main.py相同,这就是说:
python -O main.pyc 可以正常运行,只要存在module.pyo
python main.pyo可以正常运行,只要存在module.pyc