PyPy - 特性
PyPy 是 CPython 的替代品。它使用与之共同开发的 RPython 语言构建。使用它而不是 CPython 的主要原因是速度:它通常运行得更快(参见下一节)。
PyPy 实现 Python 2.7.18、3.10.14 和 3.9.19。它支持所有核心语言。它支持大多数常用的 Python 标准库模块。有关与 CPython 的已知差异,请参见我们的 兼容性 页面。
以下 CPU 架构受支持并得到维护
PyPy 的 x86 版本运行在多个操作系统上,例如 Linux(32/64 位)、MacOS(64 位)、Windows(32 位)、OpenBSD、FreeBSD。非 x86 版本在 Linux 上受支持,ARM64 在 MacOS 上受支持。
如果您有兴趣提供帮助,请参见我们的 howtohelp 页面。
PyPy 的主要特性:¶
速度¶
我们的 主要可执行文件 带有一个即时编译器。它在运行大多数基准测试(包括非常大且复杂的 Python 应用程序,而不仅仅是 10 行代码)时 非常快。
您应该注意两种情况下 PyPy 无法 加速您的代码
短运行进程:如果它没有运行至少几秒钟,那么 JIT 编译器将没有足够的时间预热。
如果所有时间都花在运行时库(即 C 函数)上,而不是实际运行 Python 代码,那么 JIT 编译器将无济于事。
因此,PyPy 最适合执行长时间运行的程序,其中大部分时间都花在执行 Python 代码上。这是我们大多数 基准测试 所涵盖的情况,但并非全部 --- PyPy 的目标是获得速度,但仍然支持(理想情况下)任何 Python 程序。
内存使用情况¶
内存密集型 Python 程序(数百 MB 或更多)最终可能比在 CPython 中占用更少的空间。不过,情况并非总是如此,因为它取决于很多细节。还要注意,基线高于 CPython 的基线。
无栈¶
其他特性¶
PyPy 具有许多次要特性和半独立的项目。我们将在下面提到
沙盒¶
PyPy 的沙盒是运行不受信任的用户程序的理念的一个工作原型。与 Python 的其他沙盒方法不同,PyPy 的沙盒方法不会尝试限制被认为“不安全”的语言特性。相反,我们将所有对外部库(C 或平台)的调用替换为一个存根,该存根与处理策略的外部进程进行通信。
要运行沙盒进程,您需要获取完整的源代码并从中构建 pypy-sandbox
(参见 从源代码构建)。这些说明为您提供了一个 pypy-c
,您应该将其重命名为 pypy-sandbox
以避免将来混淆。然后运行
cd pypy/sandbox pypy_interact.py path/to/pypy-sandbox # don't confuse it with pypy/goal/pyinteractive.py!
您将获得一个完全沙盒化的解释器,它位于自己的文件系统层次结构中(尝试 os.listdir('/')
)。例如,您可以按如下方式运行不受信任的脚本
mkdir virtualtmp cp untrusted.py virtualtmp/ pypy_interact.py --tmp=virtualtmp pypy-sandbox /tmp/untrusted.py
请注意,路径 /tmp/untrusted.py
是沙盒文件系统内的路径。您根本不必将 untrusted.py
放在真实的 /tmp
目录中。
要详细了解其功能,请尝试 pypy_interact.py --help
或访问 我们的文档网站。