为了账号安全,请及时绑定邮箱和手机立即绑定

如何从 Python 中的不同目录导入文件

如何从 Python 中的不同目录导入文件

MM们 2022-04-23 21:27:59
我希望能够version files基于version_number.这是我的目录结构|_ /src       |_ main.py       |_ /models/v_0_0_x/m.py       |_ /schema/v_0_0_x/s.py       |_ /templates/v_0_0_x/t.py我的main.py样子是这样的:version = "v_0_0_2"from models.$version.models import *我一直在玩一些sys路径,但我认为应该有一个更清洁的解决方案。
查看完整描述

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)


查看完整回答
反对 回复 2022-04-23
?
红颜莎娜

TA贡献1842条经验 获得超12个赞

如何更改导入的名称以便以后通过“as”更好地访问:

    import os.path as p

然后您可以通过以下方式访问该导入的功能:

    p.join("a", "b")

结果输出:

    'a/b'

对于您的项目,这将是:

    import models.$version.models as current_models

我不确定这是否是一个解决方案并适用于您导入的模块。我经常使用它来缩短模块名称。这应该适用于任何 Python 版本。


查看完整回答
反对 回复 2022-04-23
  • 2 回答
  • 0 关注
  • 199 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号