我使用CMake构建我的应用程序.如何找到python site-packages目录所在的位置?我需要路径才能编译扩展到python.
当我计划在Linux,Mac和Windows上部署我的应用程序时,CMake必须能够在所有三个主要操作系统上找到路径.
我试过用
include(FindPythonLibs)
find_path( PYTHON_SITE_PACKAGES site-packages ${PYTHON_INCLUDE_PATH}/.. )
Run Code Online (Sandbox Code Playgroud)
但这不起作用.
我也可以通过运行获取路径
python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"
Run Code Online (Sandbox Code Playgroud)
在shell上,但我如何从CMake调用它?
解:
谢谢,亚历克斯.那么给我网站包目录的命令是:
execute_process ( COMMAND python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()" OUTPUT_VARIABLE PYTHON_SITE_PACKAGES OUTPUT_STRIP_TRAILING_WHITESPACE)
Run Code Online (Sandbox Code Playgroud)
需要OUTPUT_STRIP_TRAILING_WHITESPACE命令来删除尾随的新行.
我希望能够运行一个接受命令行参数的鼻子测试脚本.例如,有些事情:
test.py
import nose, sys
def test():
# do something with the command line arguments
print sys.argv
if __name__ == '__main__':
nose.runmodule()
Run Code Online (Sandbox Code Playgroud)
但是,每当我使用命令行参数运行它时,我都会收到错误:
$ python test.py arg
E
======================================================================
ERROR: Failure: ImportError (No module named arg)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/nose-0.11.1-py2.6.egg/nose/loader.py", line 368, in loadTestsFromName
module = resolve_name(addr.module)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/nose-0.11.1-py2.6.egg/nose/util.py", line 334, in resolve_name
module = __import__('.'.join(parts_copy))
ImportError: No module named arg
----------------------------------------------------------------------
Ran 1 test in 0.001s
FAILED (errors=1)
Run Code Online (Sandbox Code Playgroud)
显然,nose试图用sys.argv中传递的参数做一些事情.有没有办法让鼻子忽视这些论点?
考虑以下简单的python代码
>>> L = range(3)
>>> L
[0, 1, 2]
Run Code Online (Sandbox Code Playgroud)
我们可以按如下方式获取此数组的切片:
>>> L[1:3]
[1, 2]
Run Code Online (Sandbox Code Playgroud)
有没有办法通过向左移动来包围上面的数组
[1, 2, 0]
Run Code Online (Sandbox Code Playgroud)
只需使用切片操作?
我试图使用numpy或scipy在python中获得非方阵的左逆.如何将以下Matlab代码翻译成Python?
>> A = [0,1; 0,1; 1,0]
A =
0 1
0 1
1 0
>> y = [2;2;1]
y =
2
2
1
>> A\y
ans =
1.0000
2.0000
Run Code Online (Sandbox Code Playgroud)
\在Matlab中是否存在numpy或scipy等效的左逆算子?
有很多关于如何从python运行shell命令的文献,但我感兴趣的是反过来.我有一个python模块mycommands.py,其中包含如下所示的函数
def command(arg1, arg2):
pass
def command1(arg1, arg2, arg3):
pass
Run Code Online (Sandbox Code Playgroud)
其中函数参数都是字符串.目标是能够从下面的bash运行这些函数
$ command arg1 arg2
$ command1 arg1 arg2 arg3
Run Code Online (Sandbox Code Playgroud)
到目前为止,我在.bash_profile中有以下粗暴设置,我必须手动为每个python函数提供bash绑定
function command() {
python -c "import mycommand as m; out=m.command('$1', '$2'); print(out)"
}
function command1() {
python -c "import mycommand as m; out=m.command1('$1', '$2', '$3'); print(out)"
}
Run Code Online (Sandbox Code Playgroud)
如果一个人可以拥有一个bash命令就好了
$ import_python mycommands.py
Run Code Online (Sandbox Code Playgroud)
它将自动导入模块中的所有python函数作为bash命令.是否存在实现此类命令的库?
我试图在SciPy中将多变量函数集成到2D区域.什么相当于以下Mathematica代码?
In[1]:= F[x_, y_] := Cos[x] + Cos[y]
In[2]:= Integrate[F[x, y], {x, -\[Pi], \[Pi]}, {y, -\[Pi], \[Pi]}]
Out[2]= 0
Run Code Online (Sandbox Code Playgroud)
查看SciPy文档,我只能找到对一维求积的支持.有没有办法在SciPy中进行多维积分?
python integration wolfram-mathematica scipy multidimensional-array
要将可执行文件与驻留在标准位置的库链接,可以在CmakeLists.txt文件中执行以下操作:
create_executable(generate_mesh generate_mesh.cpp)
target_link_libraries(generate_mesh OpenMeshCore)
Run Code Online (Sandbox Code Playgroud)
如果放入链接的库,则这将起作用
/usr/local/lib/libOpenMeshCore.dylib
Run Code Online (Sandbox Code Playgroud)
但是,在这种情况下,库位于
/usr/local/lib/OpenMesh/libOpenMeshCore.dylib
Run Code Online (Sandbox Code Playgroud)
如何指定target_link_libraries应该真正链接到sibdirectory中的库?我想知道target_link_libraries有一些有用的选项可以指定库位于标准位置的子目录中,例如
target_link_libraries(generate_mesh OpenMesh/OpenMeshCore)
Run Code Online (Sandbox Code Playgroud)
如果这是不可能的,有没有办法使用find_library /usr/local/lib递归搜索给定的库文件,包括其子目录?
我正在寻找类似std::vector但没有与动态调整大小相关的开销的C++数据类型.容器的大小在其生命周期内保持不变.boost::array但是,我认为使用它是不合适的,因为它需要在编译时知道数组的大小,在我的情况下并非如此.
假设您有一组需要求和的值
d = [1,1,1,1,1]
Run Code Online (Sandbox Code Playgroud)
和第二个数组,指定哪些元素需要加在一起
i = [0,0,1,2,2]
Run Code Online (Sandbox Code Playgroud)
结果将存储在一个新的大小数组中max(i)+1.因此,例如i=[0,0,0,0,0],相当于将所有元素相加d并将结果存储在0新的大小数组的位置1.
我尝试使用这个来实现
c = zeros(max(i)+1)
c[i] += d
Run Code Online (Sandbox Code Playgroud)
但是,该+=操作仅添加每个元素一次,从而产生意想不到的结果
[1,1,1]
Run Code Online (Sandbox Code Playgroud)
代替
[2,1,2]
Run Code Online (Sandbox Code Playgroud)
如何才能正确实现这种求和?