Вызов python модулей в нескольких каталогах одним основным скриптом - PullRequest
0 голосов
/ 21 марта 2020

У меня проблемы с доступом к python модулям в разных каталогах ..

Мой текущий каталог выглядит примерно так:

__main__.py
__test__.py
tests
    some_tests.py
    _init__.py
modules
    main_modules.py
    __init__.py       

, где в some_tests.py я буду вызывать некоторые методы из / modules, с test .py, выполняющим мои модули тестирования в / tests

Я использую ниже в some_tests.py для ссылки на модули в / modules

sys.path.append(r'../modules/')  
from main_modules import  xfunc, yfunc

это прекрасно работает, если я просто запускаю some_tests.py в изоляции. Но как только я использую test .py для вызова some_tests.py, я возвращаю ImportError, где модули из / modules не могут быть найдены, когда этот скрипт вызывает some_tests.py

Я попытался импортировать модули непосредственно в test .py, но это также не работает. Что я здесь не так делаю?

РЕДАКТИРОВАТЬ

в some_tests.py Я делаю что-то вроде

sys.path.append(r'../modules/')  
from main_modules import modulea, moduleb

def func():
    x = modulea.xfunc()
return x

, но это то, что я получаю в runtime ..

File "__test__.py", line 14, in <module>
  from tests import some_test.py
File "C:\...\__init__.py", line 2, in <module>
  from .some_test.py import (func,
File "C:\...\some_test.py", line 7, in <module>
  from modules import modulea, moduleb
ModuleNotFoundError: No module named modulea

Из того, что я могу собрать во время выполнения, когда я запускаю test .py и он выполняет импорт строго этой функции, функция не может быть импортирована, потому что она больше не работает через sys.path.append, поэтому не знает, где искать. Это все еще так, даже если я импортирую модуль в test .py явно

1 Ответ

0 голосов
/ 21 марта 2020

Вам не нужно делать sys.path.append, вместо этого вы можете напрямую импортировать следующим образом:

, если вы хотите импортировать методы или класс "main_modules.py"

from modules.main_modules import xyz,abc(whatever method or classes)

также следуйте за другими также

...