为什么' pyo' imp.get_suffixes()列表中缺少?

时间:2014-05-15 09:14:48

标签: python

函数imp.get_suffixes()返回描述特定类型模块的元组列表。

我理解pyo是在优化(-O)打开时创建的* .pyc文件。那么pyo应该被视为一个与PY_COMPILED不同的单独模块可能是PY_COMPILED_OPTIMIZED吗?

那么,为什么imp.get_suffixes()不会将pyo视为单独的模块类型?

1 个答案:

答案 0 :(得分:0)

我意识到这个问题是很久以前提出的,但现在确实是有争议的。

从Python 3.5开始,PEP 488删除了pyo扩展名,并开始对优化和未优化的字节码文件使用pyc。如果返回3.4,则会看到pyo 包括在内:

SOURCE_SUFFIXES = ['.py']
DEBUG_BYTECODE_SUFFIXES = ['.pyc']
OPTIMIZED_BYTECODE_SUFFIXES = ['.pyo']

在3.5中,该值更改为:

SOURCE_SUFFIXES = ['.py']
BYTECODE_SUFFIXES = ['.pyc']
DEBUG_BYTECODE_SUFFIXES = OPTIMIZED_BYTECODE_SUFFIXES = BYTECODE_SUFFIXES

PEP 488中的这些更改以及3.2中进行的PEP 3147更改提供了处理已编译Python的更强大的方法,其中包括:

  • 在任何优化级别上已编译字节码的通用扩展名;
  • 一个缓存子目录,以防止pyc文件使您的源区域混乱;
  • 解释器版本包含在pyc文件名中,以便您可以使用来自不同Python版本的文件;
  • 优化级别也包含在pyc文件名中,因此没有冲突。
  • 更改为模块加载器以完成所有这些工作,确保生成或加载正确的pyc文件。