【问题标题】:can't be able to import module while having modules on different folders in python在python的不同文件夹中有模块时无法导入模块
【发布时间】:2021-09-17 12:46:22
【问题描述】:

我的项目结构如下所示

code
 |
 -- core --
 |        |
 |        test1.py
 |        test2.py
 |---database--        
 |            |
 |            sample.py
 --main.py

main.py 是我的应用程序的入口点,从 main.py 我可以通过以下代码从文件夹核心导入 test1 from core import test1,它工作正常 但是当我尝试import test2 from test1(both are on same folder core) 我在 test1 中使用以下内容

import test2 
but I'm getting no module named test2 error

为什么会这样?

How can I import sample.py in database from test1.py module in core ?

【问题讨论】:

  • 您的导入是绝对的(实际上相对于 sys.path 中的条目,它自动包含您的 code 文件夹)。使用相对导入:import .test2

标签: python path pathlib


【解决方案1】:

你在这些文件中有什么?功能?上课? 你可以试试:

test1.py:from .test2 import *

sample.py:from ..core.test1 import *

【讨论】:

    【解决方案2】:

    首先:Import statement docs

    使用import 语句导入模块模块属性4种主要方式:

    1. 绝对模块导入import module_name.submodule.submodule
    2. 绝对限量进口from module_name.submodule import module_attribute, module
    3. 相对限量进口from .submodule import module_attribute, module
    4. 相对通配符导入from .submodule import *

    现在应该知道的:绝对导入从项目根目录解析路径。在您的情况下,import test2 告诉 python 加载 code/test2.py 而不是 code/core/test2.py。要解决此问题,请提供正确的绝对路径:

    import core.test2

    或切换到相对路径:

    • from . import test2 如果您从 code/core/test1.py 导入
    • from .core import test2 如果您从 code/main.py 导入
    • from ..core import test2 如果您从 code/database/sample.py 导入

    警告:注意循环导入:

    from .b import *
    
    from .a import *
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-26
      • 1970-01-01
      相关资源
      最近更新 更多