Cython 和 Exec()?

Cython and Exec()?

如果我制作了一个名为 hello.py 的 python 文件,其中包含这样的脚本。

msg = input("insert your message here: ")
script = '''
def say_something():
    print("{msg}")
'''

exec(script)
say_something()

然后我尝试使用 Cython

from distutils.core import setup
from Cython.Build import cythonize

setup(
    ext_modules=cythonize("Hello.py")
)

它会显示这样的错误:undeclared name not builtin: say_something

我明白为什么会这样,但我还不是 python 和 C 的真正专家。这只是一个例子,但它类似于我在我的一个项目中尝试做的事情。有什么办法可以解决这个问题吗?我也想找到一种方法将脚本字符串转换为 C。

我正在尝试构建一个可编辑的 python 脚本。

Cython 编译 Python 函数为一个本机二进制文件,执行 CPython 解释器应该做的事情。 exec 是一个在运行时执行任意代码的函数(这对于速度、maintainability/readability 和安全性来说通常是一个非常糟糕的主意)。 Cython 不支持 exec 因为这意味着可能会在运行时编译。因此,exec 执行的代码不可能是 Cython 代码。但是,exec 函数仍可用于执行 pure-Python 代码。正如@DavidW 所指出的,可以通过关闭安装脚本中的 Cython.Compiler.Options.error_on_unknown_names(就在调用 setup 之前)来消除错误。有了这个 Cython 就不会在找不到由 exec (或类似方法)定义的函数时抱怨。请记住,在这种情况下只能使用 CPython 而不是 Cython(这部​​分地破坏了首先使用 Cython 的目的)。