代码之家  ›  专栏  ›  技术社区  ›  Boudhayan Dev

如何在Python3中将类从一个子文件夹导入到另一个子文件夹?

  •  0
  • Boudhayan Dev  · 技术社区  · 6 年前

    所以,我有以下文件夹结构;

    Root/
    --outlook/
    ----outlook.py
    --test/
    ----test.py
    

    outlook.py 包含一个名为 Outlook .

    我正在尝试导入 见解 班在 test.py 文件如下-

    from .outlook import Outlook
    
    outlook = Outlook()
    

    我正在根文件夹中运行脚本- python test/test.py

    这会导致错误-

    Traceback (most recent call last):
      File "test/test.py", line 1, in <module>
        from .outlook.outlook import Outlook
    ModuleNotFoundError: No module named '__main__.outlook'; '__main__' is not a package
    

    请帮忙。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Crivella    6 年前

    只有在从父模块中加载子模块时,相对导入路径才起作用:

    from Root.test.test import some_function
    

    如果要将来自两个不同子模块的组件一起用作独立脚本,我建议使用非相对导入路径:

    from Root.outlook.outlook import Outlook
    

    您需要将模块根目录保存在python_path环境变量中的文件夹中

    也不要忘记添加 初始化 .py到所有文件夹

    some_directory/
        Root/
            __init__.py
            outlook/
                __init__.py
                outlook.py
            test/
                __init__.py
                test.py
    

    Eddi1:
    根据您想从Test.Py内部导入的方式,您可以面对2种不同的场景。

    从根目录.outlook.outlook导入outlook
    

    将要求python可以访问“根”目录

    PYTHON_PATH="...:...:/path_to_some_directory_that_contains_Root"
    

    虽然

    from outlook.outlook import Outlook
    

    需要遗嘱

    PYTHON_PATH="...:...:/path_to_Root"
    

    这个。。。指示环境变量中已存在的其他路径,这些路径应保持原样。
    “添加到python_路径”表示快速实现所需结果的手动方式。实际上,使用模块时应该做的是安装它,方法是在根目录和命令中使用带有disutils的'setup.py'脚本

    python setup.py install
    
        2
  •  0
  •   Vignesh Krishnan    6 年前

    你输入错误。

    from outlook.outlook import Outlook
    

    Root/ --outlook/ ----outlook.py --test/ ----test.py

    在您的情况下,您正在检查outlook文件夹,因此您也必须指向该文件。