【问题标题】:Import functions from path to list/dict从路径导入函数到列表/字典
【发布时间】:2019-10-05 15:14:26
【问题描述】:

什么?

我正在尝试将文件中的所有函数(给定路径)导入列表/字典

目前我正在使用herehere 所说的内容。结果是这样的

import inspect
import importlib.util

def functions_from_file(path_to_module):
    spec = importlib.util.spec_from_file_location("my_module", 
                                                  path_to_module)
    module  = importlib.util.module_from_spec(spec)
    spec.loader.exec_module(module)
    custom_functions = inspect.getmembers(module, inspect.isfunction)
    return dict(custom_functions)

至少在我看来,这似乎很令人费解。有更好/更清洁的方法吗?

为什么?

我这样做的原因是我希望用户能够指定一个包含将在我的代码中间执行的函数列表的文件。所以文件可能看起来像:

def fun1(my_dict):
    my_dict['foo'] = my_dict['bar']*2

def fun2(my_dict):
    my_dict['baz'] = my_dict['foo'] - my_dict['bar']

然后在我的代码中应该有类似

for fun in functions_list:
    fun(my_dict)

【问题讨论】:

  • 将目录添加到sys.path然后正常导入呢?否则,看看使用插件库,像pluginBase 这样的东西听起来可以做你想要的。

标签: python python-3.x python-import


【解决方案1】:

您是否尝试过将 py 文件作为模块导入到目标文件中?

See Documentation Here

【讨论】:

  • 我既不知道文件的名称,也不知道它的路径,也不知道其中的函数名称。
  • 好的,知道了。但是您的原始帖子提到您获得了文件的路径。如果您知道文件所在的目录,您仍然可以使用此处的信息列出模块中的所有函数:stackoverflow.com/questions/139180/…。希望这会有所帮助!
  • 您的链接显示了如何导入模块并将方法的名称显示为字符串。此外,我需要对模块的路径进行硬编码,并且不能将其作为输入。我的问题远不止于此。您可以尝试运行我发布的代码 sn-p 以了解所需的行为。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-10
  • 1970-01-01
  • 1970-01-01
  • 2019-03-29
  • 2015-07-21
  • 1970-01-01
  • 2017-02-16
相关资源
最近更新 更多