Как импортировать класс из одной подпапки в другую в Python 3? - PullRequest
0 голосов
/ 08 декабря 2018

Итак, у меня следующая структура папок:

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 голосов
/ 08 декабря 2018

Относительные пути импорта будут работать, только если дочерний модуль загружается из родительского модуля:

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

потребует, чтобы каталог 'Root' был доступен для python

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

, в то время как

from outlook.outlook import Outlook

потребуется

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

, который указывает ...другие пути уже присутствуют в переменной окружения, которую вы должны оставить как есть.
Добавление к PYTHON_PATH представляет собой ручной способ быстрого достижения желаемого результата.В действительности, то, что вы должны делать при работе с модулем, это установить его, используя скрипт «setup.py» с disutils внутри корневого каталога и командой

python setup.py install
0 голосов
/ 08 декабря 2018

вы импортируете неправильно.

from outlook.outlook import Outlook

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

В вашем случае вы проверяете папку outlook, поэтому вам также нужно указать на файл.

...