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

时间:2018-12-08 17:11:38

标签: python python-3.x import python-import

因此,我具有以下文件夹结构;

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

outlook.py包含一个名为Outlook的类。

我正在尝试按以下方式在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 个答案:

答案 0 :(得分:1)

相对导入路径仅在从父模块中加载子模块时才有效:

from Root.test.test import some_function

如果要同时使用两个不同子模块中的组件并作为独立脚本,建议使用非相对导入路径:

from Root.outlook.outlook import Outlook

您需要将模块Root放在PYTHON_PATH环境变量包含的文件夹中

也不要忘记将 init .py添加到所有文件夹中

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

EDIT1:
根据您要从test.py内部导入的方式,您可以面对2种不同的情况

from Root.outlook.outlook import Outlook

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

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

同时

from outlook.outlook import Outlook

需要

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

...表示环境变量中已经存在的其他路径,您应保留原样。
“添加到PYTHON_PATH中”表示手动获得快速结果的方法。实际上,使用模块时,应该使用Root目录中带有disutils的'setup.py'脚本和命令来安装模块

python setup.py install

答案 1 :(得分:0)

您输入的错误。

from outlook.outlook import Outlook

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

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