python-3.x - 从另一个目录动态导入文件
问题描述
我的输入是文件名列表(作为变量列表),我知道这些文件的路径。每个文件都有一个名为“test”的函数,我必须从每个文件中调用“test”函数。该路径不是我的工作目录。我需要能够动态导入这些文件。
我尝试使用 importlib,但出现以下错误:
import importlib
importlib.import_module("..\..\foo", package=None)
TypeError: the 'package' argument is required to perform a relative import for '..\\..\\x0coo'
importlib.import_module("C:\Users\Desktop\foo", package=None)
ModuleNotFoundError: No module named 'C:\\Users\\Desktop\\foo'
我将如何使用文件名和路径(都存储在变量中)在文件中执行函数?
解决方案
我不确定这是最好的方法,但我通过首先将模块的路径添加到 sys.path 来解决这个问题:
>>import sys
>>sys.path.append('/path/to/module')
>>mod=importlib.import_module('my_module_name')
然后你可以像这样调用该模块中的函数
>>mod.myfunc(myargs)
或者,如果你在 python 字符串中有函数名,比如 func='myfunctionname' 你可以这样称呼它
>>mod.__dict__[func](args)
推荐阅读
- java - 尽管循环在数组长度范围内,但超出范围异常
- php - curl 的等效 php 选项
- scala - Mockito 模拟 HttpResponse[Array[Byte]] 用于 Scalaj-Http 中的单元测试
- javascript - 如何从 javascript 对象中获取值?
- php - 关于php和mysql
- java - 使用实用程序类存储对象是一种好习惯吗?
- z3 - 为 Z3 的 ctx-solver-simplify 策略设置超时
- java - 如何将 play.api.libs.json.JsValue 转换为 org.json.JSONObject
- d3.js - C3.js - 在调整窗口大小时,如何将图例位置从右到下更改?
- algorithm - 给定 rand7 计算 rand5