Cython ipython 具有编译时环境变量的魔法
Cython ipython magic with compile time environmental variables
%%cython
命令非常方便地创建 cython 函数,而无需构建和使用包。该命令有几个选项,但我找不到在那里指定编译时环境变量的方法。
我想要相当于:
from Cython.Distutils.extension import Extension
ext = Extension(...
cython_compile_time_env={'MYVAR': 10},
...)
用于 %%cython
命令。
我已经试过了:
%%cython -cython_compile_time_env={'MYVAR':10}
IF MYVAR:
def func():
return 1
ELSE:
def func():
return 2
但这会引发异常:
Error compiling Cython file:
------------------------------------------------------------
...
IF MYVAR:
^
------------------------------------------------------------
...\.ipython\cython\_cython_magic_28df41ea67fec254f0be4fc74f7a6a54.pyx:2:8: Compile-time name 'MYVAR' not defined
和
%%cython --cython_compile_time_env={'MYVAR':10}
IF MYVAR:
def func():
return 1
ELSE:
def func():
return 2
投掷
UsageError: unrecognized arguments: --cython_compile_time_env={'MYVAR':10}
这是一种变通方法,而不是适当的解决方案,但它实现了所需的行为。简而言之,无法通过 %%cython
魔法提供 compile_time_env
,但对 cythonize
的调用会获取可以直接修改的默认编译器选项。对于上面的示例,请尝试以下操作。
from Cython.Compiler.Main import default_options
default_options['compile_time_env'] = {'MYVAR': 0}
# Running the magic and calling `func` yields 2
default_options['compile_time_env'] = {'MYVAR': 1}
# Running the magic and calling `func` yields 1
%%cython
命令非常方便地创建 cython 函数,而无需构建和使用包。该命令有几个选项,但我找不到在那里指定编译时环境变量的方法。
我想要相当于:
from Cython.Distutils.extension import Extension
ext = Extension(...
cython_compile_time_env={'MYVAR': 10},
...)
用于 %%cython
命令。
我已经试过了:
%%cython -cython_compile_time_env={'MYVAR':10}
IF MYVAR:
def func():
return 1
ELSE:
def func():
return 2
但这会引发异常:
Error compiling Cython file:
------------------------------------------------------------
...
IF MYVAR:
^
------------------------------------------------------------
...\.ipython\cython\_cython_magic_28df41ea67fec254f0be4fc74f7a6a54.pyx:2:8: Compile-time name 'MYVAR' not defined
和
%%cython --cython_compile_time_env={'MYVAR':10}
IF MYVAR:
def func():
return 1
ELSE:
def func():
return 2
投掷
UsageError: unrecognized arguments: --cython_compile_time_env={'MYVAR':10}
这是一种变通方法,而不是适当的解决方案,但它实现了所需的行为。简而言之,无法通过 %%cython
魔法提供 compile_time_env
,但对 cythonize
的调用会获取可以直接修改的默认编译器选项。对于上面的示例,请尝试以下操作。
from Cython.Compiler.Main import default_options
default_options['compile_time_env'] = {'MYVAR': 0}
# Running the magic and calling `func` yields 2
default_options['compile_time_env'] = {'MYVAR': 1}
# Running the magic and calling `func` yields 1