我有一个boost.python项目,我使用cmake和make编译.它是python模块的一部分,我希望能够使用distutils安装该模块.我按照这里的说明创建了一个CMakeLists.txt文件,该文件首先编译共享库,然后设置setup.py,以便make install安装python模块.但是,虽然所有python文件都被distutils识别并移动到构建目录,但共享库却没有,我真的不知道为什么.
我的项目目录结构:
我的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++类,我正在使用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) 前几天我通过 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 ×3
boost-python ×2
c++ ×2
autocomplete ×1
cmake ×1
distutils ×1
emacs ×1
jedi ×1
kwargs ×1