2 回答

TA贡献1825条经验 获得超6个赞
使用的确切方法importlib取决于您使用的 Python 版本。我正在使用 Python 3.7。
在里面models/v_0_0_2/models.py,我定义了foo = 'Hello world!。
import importlib.util
import os
version = 'v_0_0_2'
path = os.path.join('models', version, 'models.py')
spec = importlib.util.spec_from_file_location('models', path)
models = importlib.util.module_from_spec(spec)
spec.loader.exec_module(models)
print(models.foo)
结果:
Hello world!
编辑:
我上面显示的内容等同于import x.y.z as z.
如果你想模仿from x.y.z import *,你可以做这些额外的步骤:
globals().update({k: v for k, v in models.__dict__.items() if not k.startswith('_')})
del models
print(foo)

TA贡献1842条经验 获得超12个赞
如何更改导入的名称以便以后通过“as”更好地访问:
import os.path as p
然后您可以通过以下方式访问该导入的功能:
p.join("a", "b")
结果输出:
'a/b'
对于您的项目,这将是:
import models.$version.models as current_models
我不确定这是否是一个解决方案并适用于您导入的模块。我经常使用它来缩短模块名称。这应该适用于任何 Python 版本。
添加回答
举报