pypy 沙箱无法导入 time,导入 site 失败

2 投票
1 回答
929 浏览
提问于 2025-04-18 09:29

我运行了 rpython 的翻译功能,创建了一个 pypy 沙盒。

~/pypy-2.3.1-linux64/bin/pypy ../../rpython/bin/rpython -O2 --sandbox targetpypystandalone

在这个过程中出现了一些警告,其中两个似乎和时间有关。

[sandbox:WARNING] Not Implemented: sandboxing for external function 'clock_gettime'
[sandbox:WARNING] Not Implemented: sandboxing for external function 'clock_getres'

简单来说,当翻译完成后,我在运行沙盒时出现了以下输出:

'import site' failed
Python 2.7.6 (32f35069a16d819b58c1b6efb17c44e3e53397b2, Jun 11 2014, 19:06:04)
[PyPy 2.3.1 with GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>> 

然后导入时间模块也失败了:

>>>> import time
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named time
>>>> 

这是沙盒的正常表现吗?如果是的话,应该如何在沙盒进程中正确地嵌入 site-packages 等内容?我本来希望能在这个环境中使用 pip 安装,但沙盒的设置似乎让这变得非常困难。(基本上,当我尝试安装 distribute.py 时遇到了 import time 的问题,因为它需要 datetime,而 datetime 又需要 time)

1 个回答

5

我刚遇到过同样的问题。解决办法是在构建 pypy-c 沙盒的时候,加入 time 模块。在 这些说明 中,构建时要加上 --withmod-time

pypy ../../rpython/bin/rpython -O2 --sandbox targetpypystandalone --withmod-time

其他可能的选项可以在这里找到: http://pypy.readthedocs.org/en/latest/config/commandline.html

撰写回答