学无止境
我们为梦想前行!

“编译的” Python 文件

“编译的” Python 文件,对于引用了大量标准模块的短程序,有一个提高启动速度的重要方法,如果在 spam.py 所在的目录下存在一个名为 spam.pyc 的文件,它会被视为 spam 模块的预“编译”( byte-compiled,二进制编译)版本。用于创建 spam.pyc 的这一版 spam.py 的修改时间记录在 spam.pyc 文件中,如果两者不匹配,.pyc 文件就被忽略。

通常你不需要为创建 spam.pyc 文件做任何工作。一旦 spam.py 成功编译,就会尝试生成对应版本的 spam.pyc 。如果有任何原因导致写入不成功,生成的 spam.pyc 文件就会视为无效,随后即被忽略。spam.pyc 文件的内容是平台独立的,所以 Python 模块目录可以在不同架构的机器之间共享。

部分高级技巧:

  • 以 -O 参数调用 Python 解释器时,会生成优化代码并保存在 .pyo 文件中。现在的优化器没有太多帮助;它只是删除了断言( assert)语句。使用 -O 参数,所有 的字节码(bytecode)都会被优化;.pyc 文件被忽略,.py 文件被编译为优化代码。
  • 向 Python 解释器传递两个 -O 参数(-OO)会执行完全优化的二进制优化编译,这偶尔会生成错误的程序。现在的优化器,只是从字节码中删除了 __doc__ 符串,生成更为紧凑的 .pyo 文件。因为某些程序依赖于这些变量的可用性,你应该只在确定无误的场合使用这一选项。
  • 来自 .pyc 文件或 .pyo 文件中的程序不会比来自 .py 文件的运行更快;.pyc 或 .pyo 文件只是在它们加载的时候更快一些。
  • 通过脚本名在命令行运行脚本时,不会将为该脚本创建的二进制代码写入 .pyc 或 .pyo 文件。当然,把脚本的主要代码移进一个模块里,然后用一个小的启动脚本导入这个模块,就可以提高脚本的启动速度。也可以直接在命令行中指定一个 .pyc 或 .pyo 文件。
  • 对于同一个模块(译者:这里指例程 spam.py),可以只有 spam.pyc 文件(或者 spam.pyo,在使用 -O 参数时)而没有 spam.py 文件。这样可以打包发布比较难于逆向工程的 Python 代码库。
  • compileall 模块可以为指定目录中的所有模块创建 .pyc 文件(或者使用 -O 参数创建 .pyo 文件)。
赞(0)
转载请注明出处链接:Pycharm » “编译的” Python 文件

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址