Если вы хотите получить доступ ко всему дереву модулей по их именам, указанным в пакете, вы не должны включать 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')