使用Python3验证多个模块
我正在尝试验证来自不同文件的多个函数,这些文件在Python3中都具有相同的名称 <> P> >我想我有一个目录目录:<代码> DR1,它有<代码> S1<代码>,<代码> S2,<代码> S3,…,<代码> Sn/COD>这都是目录,每个都包含一个名为“代码>提交.Py < /C>”的文件。直到运行时,我才知道使用Python3验证多个模块,python,python-3.x,python-module,Python,Python 3.x,Python Module,我正在尝试验证来自不同文件的多个函数,这些文件在Python3中都具有相同的名称 P> >我想我有一个目录目录: DR1,它有 S1, S2, S3,…, Sn/COD>这都是目录,每个都包含一个名为“代码>提交.Py < /C>”的文件。直到运行时,我才知道s1到sn是什么 在每个submission.py中,都有函数f1到fm 我想创建一个脚本,通过fm执行f1,并通过sn的submission.py文件打印每个s1的输出 我想我可以导入每个目录中的每个submission.py文件,但问
s1
到sn
是什么
在每个submission.py
中,都有函数f1
到fm
我想创建一个脚本,通过fm
执行f1
,并通过sn
的submission.py
文件打印每个s1
的输出
我想我可以导入每个目录中的每个submission.py
文件,但问题是每个文件都有相同的名称。另外,s1
到sn
直到运行时才知道。显然,我可以使用os.listdir()
函数通过sn
确定s1
在通过os.listdir()
和os.path.isdir()
获取目录名后,我如何从两个不同的文件调用f1
另一张海报建议使用2.7:
这可以使用imp
然后,要调用子目录s2
中包含的submission.py
模块中的函数f3
,例如:
模块['s2'].f3()
这将是一个完美的解决方案。有人能推荐Python 3.4或3.5中的类似解决方案吗?
importlib
不支持导入给定的完整路径名,但支持从包导入。您可以通过在目录中添加一个空白的
\uuuu init\uuuuu.py
将每个子目录、s1
、s2
等制作成一个包,然后使用importlib
因此,在每个目录中,都有\uuu init\uuuuuuuuuuuupy
和submission.py
那么下面的示例代码应该可以工作:
import importlib
for pkg in ('s1','s2'):
globals()['submission'] = importlib.import_module(pkg+'.submission',pkg)
submission.f1()
submission.f2()
# etc...
请注意,我使用的是Python2,它只有importlib.import_module()
,Python3有更多的功能,但我希望上述功能仍然有效
也不是说包含
s1
等的目录必须位于PYTHONPATH中。importlib
不支持导入给定的完整路径名,但支持从包导入。您可以通过在目录中添加一个空白的
\uuuu init\uuuuu.py
将每个子目录、s1
、s2
等制作成一个包,然后使用importlib
因此,在每个目录中,都有\uuu init\uuuuuuuuuuuupy
和submission.py
那么下面的示例代码应该可以工作:
import importlib
for pkg in ('s1','s2'):
globals()['submission'] = importlib.import_module(pkg+'.submission',pkg)
submission.f1()
submission.f2()
# etc...
请注意,我使用的是Python2,它只有importlib.import_module()
,Python3有更多的功能,但我希望上述功能仍然有效
也不是说包含
s1
等的目录必须驻留在PYTHONPATH中。看一下,然后再看一下。你能建议我如何使用它吗?我链接到它的文档非常广泛。为什么不试试看你过得怎么样?关于所有模块都具有相同名称的部分与它们是否按顺序导入无关。每个后续导入都将覆盖Python命名空间中的前一个导入。你能建议我如何使用它吗?我链接到它的文档非常广泛。为什么不试试看你过得怎么样?关于所有模块都具有相同名称的部分与它们是否按顺序导入无关。每个后续导入都将覆盖Python命名空间中的前一个导入。