Xtr*_*osh 15 python string import path
可能重复:
Python中的动态模块导入
我打算在不久的某个时候制作一套文件,组织它的最好方法是有一个列表,该列表将位于文件的最顶层,之后将会出现一些荒谬的代码来处理该列表控制的内容及其运行方式.我只想写一次所说的列表,并且列表是这种格式的文件夹和文件名列表:
[(folder/filename, bool, bool, int), (folder/filename, bool, bool, int)]
Run Code Online (Sandbox Code Playgroud)
如你所见,folder/filename是相同的(有点).文件名是最后的文件夹名称.py,但进行导入XXX你不需要导入XXX.py,所以我没有看到这导致问题.
我面临的问题是使用这种方法导入...
for (testName, auto, hardware, bit) in testList:
print(testName)
paths = "\\" + testName
print paths
addpath(paths)
sys.modules[testName] = testName # One of a few options I've seen suggested on the net
print("Path Added")
test = testName + ".Helloworld()"
eval(test)
Run Code Online (Sandbox Code Playgroud)
因此,对于我所拥有的每个测试,打印名称,组装包含path("\\testName")的字符串,对于此示例,打印测试路径,然后将路径添加到list(sys.path.append(path)),然后打印以确认它发生,然后组装一个将由eval测试主模块执行的字符串,并最终对其进行评估.
如您所见,我目前必须在顶部有一个导入列表.我不能简单地做导入testName(内容testName是我想导入的模块的名称),因为它会尝试查找一个名为的模块testName,而不是一个名为内容的模块testName.
我已经看到了一些这样做的例子,但在我的情况下找不到哪些工作.如果有人可以真正抛出一大堆代码来完成那将是美妙的.
我还要求我没有挂起,绘制,也没有使用eval,它在一个非常受控制的环境中使用(它循环的列表在.py文件中,所以没有"最终用户"应该一塌糊涂).
lbo*_*onn 37
不确定我是否正确理解了所有内容,但您可以使用__import__以下命令动态导入模块:
mod = __import__(testName)
mod.HelloWorld()
Run Code Online (Sandbox Code Playgroud)
编辑:我不知道__import__用户代码的python文档不鼓励使用__import__文档(如Bakuriu所述)
这也应该工作,并将被认为是更好的风格:
import importlib
mod = importlib.import_module(testName)
mod.HelloWorld()
Run Code Online (Sandbox Code Playgroud)
Bak*_*riu 20
sys.modules如果你不确切知道自己在做什么,永远不要直接搞乱.__import__功能imp.load_moduleimportlib.import_module我会避免__import__直接使用,并继续使用importlib.import_module(这也是文档末尾的建议__import__).