CodeSandbox#

概述#

CodeSandbox 基于docker SDK构建,用于帮助用户在安全环境下执行代码片段。目前支持执行Python代码片段和 bash 命令。

先决条件#

使用沙箱功能需要安装docker。推荐安装docker>=7.1.0。

pip install docker

配置沙箱环境#

from evofabric.core.typing import CodeExecDockerConfig
from evofabric.core.tool import CodeSandbox

# Base configuration for the sandbox environment; unspecified attributes use default values
config = CodeExecDockerConfig(
    name="cmd_sandbox"
)

# Initialize CodeSandbox
sandbox = CodeSandbox(config=config)

# Create and start the sandbox
sandbox.start()

# Command snippet to run inside the sandbox (you can install environment dependencies via pip; if there are network issues, you can use domestic mirrors)
cmd = """
pip3 install openpyxl
"""

# Run the command snippet inside the sandbox
result1 = sandbox.run_cmd(cmd=cmd)
print("cmd result: ", result1)

在沙箱中执行Python代码#

from evofabric.core.typing import CodeExecDockerConfig
from evofabric.core.tool import CodeSandbox

# Base configuration for the sandbox environment
config = CodeExecDockerConfig(
    image="python:3-slim",
    auto_remove=True,
    working_dir="/tmp",
    tty=True,
    detach=True,
    mem_limit="4096m",
    cpu_quota=50000,
    entrypoint="/bin/sh",
    name="python_sandbox",
    network="host",
    volumes={"/mnt/temp_test": {"bind": "/tmp", "mode": "rw"}} # mount /mnt/temp_test on the host to /tmp in the container, with mode set to 'rw' (read and write).
)

# Initialize CodeSandbox
sandbox = CodeSandbox(config=config)

# Create and start the sandbox
sandbox.start()

# Code snippet to run inside the sandbox
code1="""
def fib(n):
    if n <= 2:
        return 1
    else:
        return fib(n-1) + fib(n-2)

res = fib(10)
print("10th fib number: ", res)
"""
# Run code inside the sandbox
result1 = sandbox.run_python(code1)
print("python result: ", result1)

# Stop the sandbox. If auto_remove=True in config, the sandbox will be automatically removed after stopping.
sandbox.stop()