小编ore*_*ago的帖子

python/c ++ - 使用cmake编译共享库并使用distutils进行安装

我有一个boost.python项目,我使用cmake和make编译.它是python模块的一部分,我希望能够使用distutils安装该模块.我按照这里的说明创建了一个CMakeLists.txt文件,该文件首先编译共享库,然后设置setup.py,以便make install安装python模块.但是,虽然所有python文件都被distutils识别并移动到构建目录,但共享库却没有,我真的不知道为什么.

我的项目目录结构:

  • 项目
    • build(python distutils目录)
    • doc(模块文档)
    • 模块(主模块目录)
      • 核心(升级项目/库的目录)
        • CMakeLists.txt - 构建共享库
      • other_py_files(纯python文件的几个目录)
    • 的CMakeLists.txt
    • setup.py.in
    • setup.py(由cmake生成)

我的setup.py.in文件:

from distutils.core import setup
setup(
    name='module',
    version='${PACKAGE_VERSION}',
    packages=['module', 'module.core', 'module.other_py_files'],
    package_dir={'': '${CMAKE_CURRENT_SOURCE_DIR}'},
)
Run Code Online (Sandbox Code Playgroud)

我的CMakeLists.txt:

cmake_minimum_required (VERSION 2.6)
project (module)

add_subdirectory(module/core)

find_program(PYTHON "python")

if (PYTHON)
  set(SETUP_PY_IN "${CMAKE_CURRENT_SOURCE_DIR}/setup.py.in")
  set(SETUP_PY "${CMAKE_CURRENT_BINARY_DIR}/setup.py")
  set(DEPS "${CMAKE_CURRENT_SOURCE_DIR}/pyQCD/__init__.py")
  set(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/build/timestamp")

  configure_file(${SETUP_PY_IN} ${SETUP_PY})

  add_custom_command(OUTPUT ${OUTPUT}
    COMMAND ${PYTHON} ${SETUP_PY} build
    COMMAND ${CMAKE_COMMAND} -E touch ${OUTPUT}
    DEPENDS ${DEPS})

  add_custom_target(target ALL DEPENDS ${OUTPUT})

  install(CODE "execute_process(COMMAND ${PYTHON} ${SETUP_PY} install)")

endif()
Run Code Online (Sandbox Code Playgroud)

我认为distutils应该自动添加共享库扩展来构建目录,或者我在某处出错了?(共享库是一个基于C api(boost.python)构建的可导入的python模块,所以它应该可以工作吗?)

c++ python distutils cmake boost-python

18
推荐指数
1
解决办法
1万
查看次数

从boost :: python中的kwargs中提取参数

我有一个C++类,我正在使用boost :: python构建一个python模块.我有一些函数,我想采取关键字参数.我已经设置了包装函数来传递给raw_arguments,并且工作正常,但我想构建一些函数参数的错误检查.有没有标准的方法来做到这一点?

我的函数原型,在C++中,看起来有点像这样:

double MyClass::myFunction(int a, int b, int c);
Run Code Online (Sandbox Code Playgroud)

第三个参数是可选的,默认值为0(到目前为止,我已经使用宏在boost :: python中实现了这个).在python中,我希望能够实现以下行为:

MyClass.my_function(1) # Raises exception
MyClass.my_function(2, 3) # So that a = 2, b = 3 and c defaults to 0
MyClass.my_function(2, 3, 1) # As above, but now c = 1
MyClass.my_function(2, 3, 1, 3) # Raises exception
MyClass.my_function(3, 1, c = 2) # So a = 3, b = 1 and c = 2
MyClass.my_function(a = 2, b = 2, c = 3) # Speaks …
Run Code Online (Sandbox Code Playgroud)

c++ python kwargs boost-python

7
推荐指数
1
解决办法
2697
查看次数

Emacs Jedi 自动完成功能在 init 上不起作用

前几天我通过 el-get 安装了 jedi 以及其他一些软件包,最初一切都很好(自动完成、弹出菜单等)。

然而,在过去的几天里,jedi 已经停止工作(即自动完成、弹出窗口和函数参数建议不再工作)。

我发现此功能不起作用的部分原因是,由于某种原因,启动时未启用自动完成功能。我尝试在 el-get 加载 jedi 之前和之后将 (setq auto-complete-mode t) 添加到我的 .emacs 文件中,但尽管启用了自动完成,但由于某种原因它仍然无法工作。相反,一旦 emacs 加载,我必须使用 Mx auto-complete-mode 启用自动完成(我也尝试了这里的建议Emacs auto-complete-mode atstartup,但这只会在 emacs 加载时引发大量错误)。

除此之外,当我输入 Mx jedi RET 时,jedi 故障排除页面上列出的一些命令(例如 jed:setup-keys)似乎丢失了。

我似乎也遇到了与此人相同的问题:emacs-jedi does not find numpy finishs,但我不确定这两个问题是否有关联。

python emacs autocomplete jedi

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

标签 统计

python ×3

boost-python ×2

c++ ×2

autocomplete ×1

cmake ×1

distutils ×1

emacs ×1

jedi ×1

kwargs ×1