Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何告诉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 - Fatal编程技术网

如何告诉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++