查找扩展模块的动态库的最佳做法是什么。

时间:2017-01-24 01:01:06

标签: python python-2.7 python-3.x cmake setuptools

我有一个python模块,它依赖于使用CMake构建的C ++扩展。我可以通过多种方式构建这些C ++扩展。例如,我有python2.7的C扩展和python 3.6的C扩展。因为我使用CMake将我的构建文件与源文件分开,所以我遇到了需要在运行时找到正确的二进制文件的问题。

考虑最小的模块设置:

* setup.py
* CMakeLists.txt
* src/
    * mymodule.c
* mymodule/
    * __init__.py
* build27/
    * CMakeCache.txt
    * lib
        * libmymodule.so
* build36/
    * CMakeCache.txt
    * lib
        * libmymodule.so
* build27_debug/
    * CMakeCache.txt
    * lib
        * libmymodule.so

我之前见过的解决方案通常最终会将构建文件复制到源存储库中,这对我来说似乎是一种反模式。

允许__init__.pysetup.py找到正确版本的动态库的最佳做法是什么?是否可以将构建文件与源文件分开?

到目前为止:

到目前为止,我提出的唯一解决方案是将python源文件复制到相应的构建目录中,然后我将控制目录名称。

但是,因为我正在开发模块,所以我真的要运行python setup.py developpip install -e .来以可编辑/开发模式安装模块。这样,当我对__init__.py进行更改时,我会立即看到它们。如果我将python模块复制到build目录,我就无法实现这种行为。

我也考虑使用符号链接,但遗憾的是我无法在Windows上使用它。

其他信息:

我正在运行几个与我创建的构建文件夹相对应的virtualenv。

我正在尝试使用的真正的回购是FLANN的分支(设置方式比这个最小的例子复杂一点)

0 个答案:

没有答案