腌制功能并包括进口

时间:2018-04-27 17:37:24

标签: python python-3.x pickle

我的想法是这样,所以我想允许用户将代码发送到Web端点。

我想从方法中获取模块/导入。 这可能吗?

import pickle
import inspect

def add(x,y):
    return x+y

def stringify_method(func):
    """"""
    return pickle.dumps(func)

print(pickle.loads(stringify_method(add))(1,2))
3

所以它返回3,这是预期的。

现在让我说我有更复杂的事情:

import sys
import pickle
import inspect
import arcpy
import pandas as pd
import numpy as np

def create_array(array):
    return np.array(array)

def unpickle_method(func):
    """"""
    return pickle.dumps(func)

print(pickle.loads(stringify_method(create_array))([1,2,3,4]))

我得到的方法很好,但模块不遵循。我如何获得import numpy as np和熊猫等??

1 个答案:

答案 0 :(得分:3)

不完全确定您要做什么,但这有用吗?

>>> import sys
>>> import numpy as np
>>> import inspect
>>> 
>>> [x[0] for x in inspect.getmembers(sys.modules[__name__], inspect.ismodule)]
['__builtins__', 'inspect', 'np', 'sys']
  

这让我在那里得到1/2,我需要能够从方法中获取import语句:import numpy as np

您可能会重建以下语句:

>>> [(x, y.__name__) for x,y in inspect.getmembers(sys.modules[__name__], inspect.ismodule)]
[('__builtins__', 'builtins'), ('inspect', 'inspect'), ('np', 'numpy'), ('sys', 'sys')]

(请注意('np', 'numpy')元素告诉您import numpy as np