【发布时间】:2018-08-22 06:57:03
【问题描述】:
我们有一堆 C++ 文件,其中包含我们使用 Cython 包装到 Python 的类。我们使用 setuptools 来构建 Cython 扩展。这一切都很好,我们按照这里的指南进行操作: http://cython.readthedocs.io/en/latest/src/userguide/wrapping_CPlusPlus.html
我们基本上是在做这样的事情
from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules = cythonize(
"rect.pyx", # our Cython source
sources=["Rectangle.cpp"], # additional source file(s)
language="c++", # generate C++ code
))
我们不喜欢我们必须重新编译所有内容,即使只有 Cython 部分发生更改,在此示例中为 rect.pyx。事实上,我们从不接触.cpp 文件,但经常更改.pyx 文件。
我们想将.cpp文件单独编译成静态或共享库,然后独立构建.pyx文件,链接到.cpp文件生成的库。使用make 或cmake,这一切都将变得简单,但我们需要一个仅使用setuptools 的纯Python 解决方案。模拟代码看起来像这样:
from distutils.core import setup
from Cython.Build import cythonize
class CppLibary:
# somehow get that to work
# this should only recompile cpplib when source files changed
cpplib = CppLibary('cpplib',
sources=["Rectangle.cpp"], # put static cpp code here
include_dirs=["include"])
setup(ext_modules = cythonize(
"rect.pyx", # our Cython source
libraries=[cpplib], # link to cpplib
language="c++", # generate C++ code
))
【问题讨论】:
-
从未使用过它,似乎记录很少,但有一个
build_clib命令可能对您有用 - stackoverflow.com/questions/16854066/… -
谢谢你,@chrisb。我查看了相关的stackoverflow.com/questions/16854066/…,但来自 distutils 的
build_clib不起作用,显然它已从 setuptools 中删除
标签: python c++ build cython setuptools