我正在运行 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 工作?
我正在运行 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 工作?
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'
这就是我发现的:http ://effbot.org/librarybook/py-compile.htm
我可以按照上面链接中的说明启动 python 3.2 shell。结果是一个奇怪目录中的 .pyc 文件。pyc 比 .py 文本文件大(这应该发生吗?)这不像 pycompile 那样令人满意 - 直到我发现我可能不得不忍受这个:-(