3

我正在运行 mint 13 并使用apt-get包管理系统安装了 python 3.2。我还安装了 python 2.7 和 3.2 pycompile 似乎是打包 python 2.7 代码并为 python 3.2 代码抛出异常的那个。

我环顾四周并尝试安装一些软件包,但找不到适用于 python 3.2 的 pycompile。如何获得 python 3.2 的 pycompile 工作?

4

2 回答 2

7

py_compile是一个标准库模块,可以在给定 Python 源代码的情况下生成字节码。很少需要它。

要编译 Python 3 源代码,您必须使用它附带的 py_compile 版本,而不是 Python 2.7 中的版本(如果您从命令行使用它):

$ python3 -mpy_compile your_script.py

要更改存储 pyc 文件的默认位置,您可以使用函数cfile的参数。py_compile.compile()

字节码是否使脚本运行得更快?

它可能(微不足道)。Python 编译器做的不多,所以它很快。

这是一个示例,字节码在人类可读形式中的外观:

>>> def f(o):
...     with o:
...         pass
...
>>> import dis   
>>> dis.dis(f)
  2           0 LOAD_FAST                0 (o)
              3 SETUP_WITH               5 (to 11)
              6 POP_TOP             

  3           7 POP_BLOCK           
              8 LOAD_CONST               0 (None)
        >>   11 WITH_CLEANUP        
             12 END_FINALLY         
             13 LOAD_CONST               0 (None)
             16 RETURN_VALUE

所有繁重的工作都留给了在运行时解释字节码的 python 解释器。

还是仅用于分发?

文档提供了一个用例:一个带有 Python 模块的共享目录,只有窗帘用户可以编写。您可以禁用缓存字节码到磁盘,这样就可以使用存储在只读位置的 py 文件而没有相应的 pyc 文件。

为什么很少使用?

通常 pyc 文件是通过构建/安装过程创建的。如果没有 pyc 文件,则可以在导入模块时即时创建它们:

$ python -c 'import some_module'
于 2012-10-22T03:17:11.520 回答
0

这就是我发现的:http ://effbot.org/librarybook/py-compile.htm

我可以按照上面链接中的说明启动 python 3.2 shell。结果是一个奇怪目录中的 .pyc 文件。pyc 比 .py 文本文件大(这应该发生吗?)这不像 pycompile 那样令人满意 - 直到我发现我可能不得不忍受这个:-(

于 2012-10-22T02:55:56.233 回答