小编dzh*_*lil的帖子

使用CMake查找python site-packages目录

我使用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命令来删除尾随的新行.

python cmake

15
推荐指数
3
解决办法
6341
查看次数

带命令行参数的鼻子测试脚本

我希望能够运行一个接受命令行参数的鼻子测试脚本.例如,有些事情:

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 nose command-line-arguments

15
推荐指数
3
解决办法
2万
查看次数

在球拍中包含外部文件

我想包括在给定的racket文件中定义的所有函数,以便获得与复制时相同的效果.有可能吗?

scheme include racket

15
推荐指数
2
解决办法
6798
查看次数

将python列表包装为切片操作

考虑以下简单的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)

只需使用切片操作?

python slice

14
推荐指数
1
解决办法
8561
查看次数

在numpy或scipy中左转?

我试图使用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 matlab numpy linear-algebra matrix-inverse

13
推荐指数
1
解决办法
6848
查看次数

将python函数作为bash命令运行

有很多关于如何从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命令.是否存在实现此类命令的库?

python bash shell

13
推荐指数
2
解决办法
6225
查看次数

SciPy中的2D积分

我试图在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

12
推荐指数
2
解决办法
8336
查看次数

如何使用cmake查找库?

要将可执行文件与驻留在标准位置的库链接,可以在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递归搜索给定的库文件,包括其子目录?

linker cmake subdirectory

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

矢量与恒定的大小

我正在寻找类似std::vector但没有与动态调整大小相关的开销的C++数据类型.容器的大小在其生命周期内保持不变.boost::array但是,我认为使用它是不合适的,因为它需要在编译时知道数组的大小,在我的情况下并非如此.

c++ arrays static vector

11
推荐指数
2
解决办法
6217
查看次数

按索引计算的numpy数组的累积总和

假设您有一组需要求和的值

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)

如何才能正确实现这种求和?

python numpy sum indices

10
推荐指数
2
解决办法
5805
查看次数