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

How do I pass in variables into python import path

我正在尝试找出如何参数化包路径但无法弄清楚。

这是一个例子:

如果我执行以下操作,它会起作用,a、b 是一个目录名称,其中包含 __init__.py,最后一个目录 b 包含一个 c.py 文件,其中包含 'd' 作为 class 名称 from a.b.c import d (python 没有任何问题)

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

类似于: b = 'y' <-- 这个名字是动态计算出来的 来自 a.b.c 导入 d

上面的标识符b是一个字符串,python不会带,貌似我可能需要:eval(), lambda, getattr()等把字符串'y'转换成模块标识符,但我无法使其正常工作。

有人能帮帮我吗,非常感谢!

布鲁斯

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'