如何告诉pyximport使用cython--cplus选项? PyxPixt是非常方便的,但我无法理解如何使它参与Cython的C++语言选项。从命令行运行cython--cplus foo.pyx。如何实现pyximport的等效功能?谢谢 > P> Cython创建C++文件的一种方法是使用PyxBLD文件。例如,创建包含以下内容的foo.pyxbld: def make_ext(modname, pyxfilename): from distutils.extension import Extension return Extension(name=modname, sources=[pyxfilename], language='c++')
这里有一个黑客 下面的代码猴子修补了如何告诉pyximport使用cython--cplus选项? PyxPixt是非常方便的,但我无法理解如何使它参与Cython的C++语言选项。从命令行运行cython--cplus foo.pyx。如何实现pyximport的等效功能?谢谢 > P> Cython创建C++文件的一种方法是使用PyxBLD文件。例如,创建包含以下内容的foo.pyxbld: def make_ext(modname, pyxfilename): from distutils.extension import Extension return Extension(name=modname, sources=[pyxfilename], language='c++'),c++,python,cython,C++,Python,Cython,这里有一个黑客 下面的代码猴子修补了pyximport中的get\u distutils\u extension函数,以便它创建的extension对象都将其language属性设置为c++ import pyximport from pyximport import install old_get_distutils_extension = pyximport.pyximport.get_distutils_extension def new_get_distutils_extension
pyximport
中的get\u distutils\u extension
函数,以便它创建的extension
对象都将其language
属性设置为c++
import pyximport
from pyximport import install
old_get_distutils_extension = pyximport.pyximport.get_distutils_extension
def new_get_distutils_extension(modname, pyxfilename, language_level=None):
extension_mod, setup_args = old_get_distutils_extension(modname, pyxfilename, language_level)
extension_mod.language='c++'
return extension_mod,setup_args
pyximport.pyximport.get_distutils_extension = new_get_distutils_extension
将上述代码放入pyximportcpp.py中。然后,不再使用
import-pyximport;install()
,使用导入pyximportcpp;pyximportcpp.install()
您可以让pyximport使用cythonize命令进行扩展,从而识别标题注释#distutils:langauge=c++
。为此,您可以在filename.pyx旁边创建一个新文件filename.pyxbld:
现在您可以使用distutils标题注释:
# filename.pyx
# distutils : langauge = c++
Pyximport将使用.pyxbld文件中的make_ext函数来构建扩展名。cythonize将识别distutils标题注释。一个更轻量级/侵入性更小的解决方案是使用
setup\u args/script\u args
,该pyximport
将传递给发动机罩下使用的distutils
:
script_args=[“--cython cplus”]
设置参数={
“脚本参数”:脚本参数,
}
安装(安装参数=安装参数,语言级别=3)
python setup.py build\u ext的其他选项可以以类似的方式传递,例如script\u args=[“--cython cplus”,“--force”]
文档的开头提到了setup_args
,但从代码本身来看,确切的含义可能是最清楚的(这是一个很好的起点)。简单地说,pyximport会自动遵守foo.pyxbld中给出的指令吗?我对最后一点也很好奇。pyxbld文件是如何/在哪里被考虑的?我现在看起来没有更简单的方法。如果像这样的东西被添加到pyximport中,那就太好了。我刚刚尝试了在中显示的注释编译器指令,但它们似乎无法与pyximport一起工作。
# filename.pyx
# distutils : langauge = c++