Как сделать импорт в python в проекте из нескольких модулей, организованных в разных папках?

#python #python-3.x #import

Вопрос:

Я создаю программное обеспечение. Я организовал разный код в разных файлах python (модулях), организованных в разных папках.

Это действовало как заклинание. Тогда сегодня это больше не работает, так как у меня есть некоторые проблемы:

 ModuleNotFoundError: No module named 'modules.mymodulesteam'  

Вот как организован мой код:

 MySoftware/  - start.py  - modules/  -- mymodules.py  -- prepare.py  -- mymodulesteam.py  

В start.py файл, у меня есть этот импорт:

 from modules import prepare_envir_appium  

в prepare.py У меня есть эта строка импорта

 import modules.mymodulesteam as mymodules  

Когда я исполню «start.py», У меня есть это сообщение об ошибке в консоли:

 Traceback (most recent call last): File "E:MySoftwaremodulesprepare.py",  import modules.mymodulesteam as mymodules  ModuleNotFoundError: No module named 'modules.mymodulesteam'  

поэтому я обратился за помощью и увидел, что мне нужно кое-что добавить _init.py файл в моей папке «модули». Я сделал это, и это не сработало. У меня точно такая же проблема.

Я прочитал каждый пост, касающийся такого рода проблем, и перепробовал многое.

 from modules import mymodulesteam from . import mymodulesteam etc...  

И я получаю такого рода ошибки:

 Traceback (most recent call last): File "E:MySoftwaremodulesprepare.py",  from modules import mymodulesteam as mymodules ImportError: cannot import name 'mymodulesteam' from 'modules' (E:MySoftwaremodules__init__.py)  

Поэтому я удалил этот файл «_ init _.py» и проверил еще раз. На этот раз я получаю эту ошибку:

 Traceback (most recent call last): File "E:MySoftwaremodulesprepare.py",  from modules import mymodulesteam as mymodules ImportError: cannot import name 'mymodulesteam' from 'modules' (unknown location)  

Раньше это работало очень хорошо. Я не знаю, что случилось. Кто-нибудь может мне помочь, пожалуйста?

Ответ №1:

Это не работает, потому что модули находятся по разным путям, и скрипт не знает, где искать.

Ваш текущий start.py файл выглядит следующим образом,

 from modules import prepare_envir_appium  

Вместо этого сделайте это в верхней части вашего start.py файла, потому что ваш prepare_envir_appium.py файл находится в модулях.

 import sys sys.path.insert(0,"../modules")  import prepare_envir_appium   

Теперь вы можете получить доступ к своим функциям с помощью prepare_envir_appium.functionname .

Вы также можете сделать это,

 import sys sys.path.insert(0,"../modules")  import prepare_envir_appium as per  

Теперь вы можете получить доступ к функциям, используемым per.functionname в start.py.

Вы также можете импортировать определенные функции, подобные этой,

 import sys sys.path.insert(0,"../modules")  from prepare_envir_appium import functionname1, functionname2  

и вы можете просто запускать их, используя их имена функций.

Однако, если вы просматриваете prepare.py сценарий, поскольку модуль находится в той же папке, что и сценарий, все, что вам нужно сделать, это импортировать имя файла, как показано ниже, без расширения .py.

Вы можете следовать тем же соглашениям об именовании импорта, что и выше.

 import mymodulesteam  

или

 import mymodulesteam as mmt  

или

 from mymodulesteam import function1, function2  

Комментарии:

1. Спасибо, что попытались помочь. Это ничего не изменило.

2. Кроме того, «импорт mymodules» находится в prepare.py файл, который находится во вложенной папке «модули»

3. @GauthierButtez для скриптов в той же папке, что и модуль, все, что вам нужно сделать, это импортировать имя файла без .py

4. Если это не сработает, можете ли вы показать мне ошибку ? @GauthierButtez

5. Я получаю такую же ошибку «ModuleNotFoundError: нет модуля с именем «mymodulesteam»»