我有一个C/C++库,并提供不同的目标语言绑定。其中一种语言是Python。我决定使用Swig,因为它为很多语言提供了很好的支持,并且它与CMake的集成非常简单。
为了提高Python绑定的可用性和它的安装,我想提供一个setup.py。这个想法是从setup.py文件中运行CMake,因为CMake包含了如何正确创建绑定的所有逻辑。
我目前有:
我能够运行CMake和建设的Python从setup.py内粘合的目标。
通过Swig的设计,CMake文件需要区分Python 2和Python 3.在运行CMake时,它会检测Python安装的位置并配置环境。如果用户安装了这两个,Python 2和Python 3中(与他们开发包)的CMake始终把Python 3的
据:https://cmake.org/cmake/help/v3.0/module/FindPythonLibs.html实际使用Python版本可以通过设置PYTHON_LIBRARY和PYTHON_INCLUDE_DIR指定。比如我要运行:如果用户执行
:
cmake -DPYTHON_INCLUDE_DIR=/usr/include/python2.7 -DPYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython2.7.so
什么问题
python setup.py build
可执行 '巨蟒' 的Python版本可能是2,但CMake使用版本3构建绑定(参见上文)。
根据Find python header path from within python?我能够用得到的头文件的位置:
from distutils.sysconfig import get_python_inc
get_python_inc()
不幸的是,我不知道如何让Python库的路径。通过提供的解决方案:Distribution independent libpython path不为我工作,因为它总是返回“/ usr/lib目录”,而不是“/usr/lib/x86_64-linux-gnu/libpython2.7.so”
的问题:
如何从Python中获取Python库的位置(完整路径)。
[获取Python的LIB路径]的可能重复(https://stackoverflow.com/questions/47423246/get-pythons-lib-path) –