Cython and Exec()?

  • 本文关键字:Exec and Cython cython
  • 更新时间 :
  • 英文 :


如果我制作了一个名为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是一个在运行时执行任意代码的函数(对于速度、可维护性/可读性和安全性来说,这通常是一个非常糟糕的想法(Cython不支持exec,因为这意味着can将在运行时编译。因此,exec执行的代码不能是Cython代码。但是,exec函数仍然可以用于执行纯Python代码。如@DavidW所指出的,可以通过关闭设置脚本中的Cython.Compiler.Options.error_on_unknown_names(就在调用setup之前(来消除该错误。有了这个,Cython在找不到exec(或类似方法(定义的函数时不会抱怨。请记住,CPython只能在这种情况下使用,而不能使用Cython(这在一开始就部分违背了使用Cythoon的目的(。

相关内容

  • 没有找到相关文章

最新更新