腌制一个函数并包含导入
Pickling a Function and Include the Imports
我的想法是这样的,所以我想允许用户将代码发送到网络端点。
我想从方法中获取 modules/imports。
这可能吗?
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
所以它 returns 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
和 pandas,等等?
不确定您要做什么,但这有帮助吗?
>>> import sys
>>> import numpy as np
>>> import inspect
>>>
>>> [x[0] for x in inspect.getmembers(sys.modules[__name__], inspect.ismodule)]
['__builtins__', 'inspect', 'np', 'sys']
this gets me 1/2 way there, I need to be able to then grab the import statements from the method: 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
)
我的想法是这样的,所以我想允许用户将代码发送到网络端点。
我想从方法中获取 modules/imports。 这可能吗?
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
所以它 returns 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
和 pandas,等等?
不确定您要做什么,但这有帮助吗?
>>> import sys
>>> import numpy as np
>>> import inspect
>>>
>>> [x[0] for x in inspect.getmembers(sys.modules[__name__], inspect.ismodule)]
['__builtins__', 'inspect', 'np', 'sys']
this gets me 1/2 way there, I need to be able to then grab the import statements from the method: 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
)