如何将变量传入python导入路径

时间:2015-05-14 01:15:32

标签: python import identifier

我正在试图找出如何参数化一个包路径,但无法弄明白。

以下是一个例子:

如果我执行以下操作,它可以工作,a,b是一个目录名,其中包含__init__.py,最后一个目录b包含一个c.py文件,其中包含'd'作为类名 来自a.b.c import d(python接受它没有任何问题)

我正在尝试将目录'b'作为我可以动态传递的变量。

像: b ='y'< - 这个名字以某种方式动态计算出来 来自a.b.c import d

上面的标识符b是一个字符串,python不会接受它,看起来我可能需要:eval(),lambda,getattr()等将字符串'y'转换为模块标识符,但我不能让它工作。

有人可以帮助我,非常感谢!

布鲁斯

1 个答案:

答案 0 :(得分:0)

wim@wim-imac:/tmp$ find a 
a
a/__init__.py
a/b
a/b/__init__.py
a/b/c
a/b/c/__init__.py
a/y
a/y/__init__.py
a/y/c
a/y/c/__init__.py
wim@wim-imac:/tmp$ cat a/b/c/__init__.py 
d = 'd in b'
wim@wim-imac:/tmp$ cat a/y/c/__init__.py 
d = 'd in y'

现在importlib已满足您的需求:

wim@wim-imac:/tmp$ python -i -c ""
>>> from importlib import import_module
>>> mod_a_b_c = import_module('a.b.c')
>>> mod_a_b_c.d
'd in b'
>>> mod_a_y_c = import_module('a.y.c')
>>> mod_a_y_c.d
'd in y'

这些是便利包装。如果您特别想要进行“from”样式导入,则必须直接使用__import__ magic method并使用fromlist kwarg。这有点拖累语法,但仍有可能:

>>> d = __import__('a.b.c', fromlist=['d']).d
>>> d
'd in b'
>>> d = __import__('a.y.c', fromlist=['d']).d
>>> d
'd in y'