如何从python代码创建动态链接库(.so,.dll)

时间:2019-10-06 04:46:47

标签: python shared-libraries

假设我有一些python代码( A ):

import random

def get_random_positions(self, nparray, howmany, newvalue):
    randlist = random.sample(range(nparray.size), howmany)
    for anint in randlist:
        nparray.reshape(-1)[anint] = newvalue
    return nparray
我要作为动态链接库分发的

(无论是动态链接库还是dll)。 有简单的方法吗?

很明显(或可能不是...),此函数将获得一个numpy数组,将更改其中的一些随机位置并返回更改后的数组。

在python中,作为一个独立的脚本,该函数不会直接调用numpy。期望numpy方法“包括”在传递的nparray参数中,或者,正如有人可能会说的那样,期望调用者将通过将numpy模块或部分模块的功能传递给她来使用该功能。

当然是这样的代码( B ):

import random
import numpy

def get_random_positions(self, nparray, howmany, newvalue):
    localarray = numpy.array(nparray)
    randlist = random.sample(range(localarray.size), howmany)
    for anint in randlist:
        numpy.reshape(localarray, -1)[anint] = newvalue
    return localarray
对于将代码转换为动态链接库的所有“事物”,

可能更具“描述性”,但这并不是大多数python代码编写的方式。

恢复

如何从第一个代码(A)中创建一个动态链接库,该库以某种方式公开“ get_random_positions”方法,从而使任何人都知道公开方法的存在以及所需参数的类型和返回变量的类型,可以在任何地方使用它吗?

在C#中的用法示例:

[DllImport("myown.dll")]
public static extern object get_random_positions(object nparray, long howmany, int newvalue );

或使用其他任何语言,通过使用语言的特定方式来调用外部Dll。

(在上面的C#调用示例中,“对象”可以替换为适当的类型)

如果对于第一个代码示例(A)来说这并不容易(甚至不可能),那么对于第二个代码示例(B)可能吗?

0 个答案:

没有答案