猿问

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

我希望能够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路径,但我认为应该有一个更清洁的解决方案。


MM们
浏览 200回答 2
2回答

胡子哥哥

使用的确切方法importlib取决于您使用的 Python 版本。我正在使用 Python 3.7。在里面models/v_0_0_2/models.py,我定义了foo = 'Hello world!。import importlib.utilimport osversion = '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 modelsprint(foo)

红颜莎娜

如何更改导入的名称以便以后通过“as”更好地访问:    import os.path as p然后您可以通过以下方式访问该导入的功能:    p.join("a", "b")结果输出:    'a/b'对于您的项目,这将是:    import models.$version.models as current_models我不确定这是否是一个解决方案并适用于您导入的模块。我经常使用它来缩短模块名称。这应该适用于任何 Python 版本。
随时随地看视频慕课网APP

相关分类

Python
我要回答