小编Jam*_*mes的帖子

如何安装 C++ 库的 python 绑定

想象一下,我们得到了一个名为MyAwesomeLib. 目标是将其部分功能暴露给 python,因此我们使用 swig 创建了一个包装器并生成了一个名为PyMyAwesomeLib.

目录结构现在看起来像

root_dir
|-src/
|-lib/
|    |- libMyAwesomeLib.so
|    |- _PyMyAwesomeLib.so
|-swig/
|    |- PyMyAwesomeLib.py
|-python/
     |- Script_using_myawesomelib.py
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好。理想情况下,所有我们下一步要做的就是复制lib/*.so swig/*.pypython/*.py在进入相应的目录site-packagesPython化,即使用方式

python setup.py install
Run Code Online (Sandbox Code Playgroud)

但是,在尝试使用setuptoolsand实现这个简单的目标时,我感到非常困惑distutils。这两个工具都通过内部系统处理 python 扩展的编译,其中源文件、编译器标志等使用setup(ext_module=[Extension(...)]). 但这很荒谬,因为它MyAsesomeLib有一个基于 makefile 的功能齐全的构建系统。移植嵌入在 makefile 中的逻辑将是多余的并且完全没有必要的工作。

经过一些研究,似乎还有两个选项,我可以覆盖setuptools.command.buildsetuptools.command.install使用现有的 makefile 并直接复制结果,或者我可以以某种方式setuptools告知这些文件并要求它在安装过程中复制它们。第二种方式更吸引人,但却是最让我头疼的地方。我尝试了以下选项但没有成功

  • package_data, 并且include_package_data不起作用,因为 *.so 文件不受版本控制并且它们不在任何包内。
  • data_files似乎不起作用,因为文件只在运行时被包含python setup.py sdist,但在python setup.py install …

python swig distutils setuptools setup.py

5
推荐指数
1
解决办法
1597
查看次数

标签 统计

distutils ×1

python ×1

setup.py ×1

setuptools ×1

swig ×1