Импорт модуля Python 3.7 - PullRequest
       3

Импорт модуля Python 3.7

0 голосов
/ 07 декабря 2018

Эй, у меня есть древовидная структура с пустым init .py в каждом каталоге / подкаталоге.Однако мне не удалось загрузить утилиты модуля из файла .py моего домашнего каталога.

Использование python 3.7

Мое дерево выглядит следующим образом:

    C:.
├───Tests
│   ├───Checkout
│   ├───GlobalFooter
│   ├───GlobalHeader
│   │   └───__pycache__
│   ├───Home
│   │   └───__pycache__
│   ├───MyAccount
│   ├───ProductDetail
│   ├───ProductResults
│   │   └───__pycache__
│   └───SignIn
└───Utilities
    └───__pycache__

Iпробовал следующее:

sys.path.insert(0, 'C:/Web2/TSC.WebFactory.Web2.Tests/Utilities')
from Utilities.utils import addCookies, configureOptions

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Если вы хотите получить доступ ко всему дереву модулей по их именам, указанным в пакете, вы не должны включать Utilities в запись sys.path;from Utilities.utils import ... предполагает, что в некоторой папке в sys.path есть пакет / папка с именем Utilities, которая содержит либо подпакет / папку с именем utils, либо субмодуль / файл с именем utils.py;добавив 'C:/Web2/TSC.WebFactory.Web2.Tests/Utilities' к sys.path, он ожидает 'C:/Web2/TSC.WebFactory.Web2.Tests/Utilities/Utilities/utils.py' (примечание удвоилось Utilities).

Решение здесь состоит в том, чтобы удалить этот последний каталог из пути:

sys.path.insert(0, 'C:/Web2/TSC.WebFactory.Web2.Tests')

Теперь from Utilities.utils import ... будет искать Utilities\utils.py в C:\Web2\TSC.WebFactory.Web2.Tests и найдет его, как и ожидалось.

Примечание: если вы хотите сохранить стандартные обратные слеши Windows в качестве разделителей каталогов, вы можете использовать их довольно чистопросто сделав путь необработанным строковым литералом, избегая необходимости постоянного экранирования:

sys.path.insert(0, r'C:\Web2\TSC.WebFactory.Web2.Tests')
0 голосов
/ 07 декабря 2018

Если вы еще не пробовали, сделайте это, как при sys.path.insert, вам не нужно указывать папку в строке импорта.

from utils import addCookies, configureOptions

...