Import не видит папку
В корне лежит несколько репозиториев и исполняемый файл run.py.
Некоторые репы мои, некоторые нет и содержат сложную структуру, встречаются __init__, __main__ файлы. Я запускаю свой скрипт и получаю после цепочки import вызовов эту проблему:
ModuleNotFoundError: No module named repository_1/src
Но если в этой же консоли откуда я запускаю, вывести файлы, папки на месте.
Все import в цепочке написаны мною и пути даже в одной репе начинаются с корня. Я не уверен, что так правильно, но я не знаю способа лучше без sys.path.append
Т.е. в my_rep/src/scripts/say_hello.py все импорты написаны в духе\
from my_rep/src/utils/utils.py import hello_func
from my_rep_old/src/utils/utils.py import hello_func_old
И они поднимаются нормально. Но один из импортов не в мою репу падает.
Ответы (1 шт):
Добавьте в папку my_rep файл __init__.py
Файлы __init__.py необходимы, чтобы Python рассматривал каталоги как содержащие пакеты; это делается для того, чтобы предотвратить каталоги с общим именем, например string, от непреднамеренного скрытия допустимых модулей, которые происходят позже (глубже) на пути поиска модуля. В простейшем случае __init__.py может быть просто пустым файлом, но он также может выполнять код инициализации для пакета или устанавливать переменную __all__, описанную ниже.
package_x/
|-- __init__.py
|-- subPackage_a/
|------ __init__.py
|------ module_m1.py
|-- subPackage_b/
|------ __init__.py
|------ module_n1.py
|------ module_n2.py
|------ module_n3.py
Мы можем использовать __init__.py в subPackage_b для ограничения импортируемых модулей следующим образом:
__all__ = ['module_n2', 'module_n3']
После запуска:
>>>from package_x.subPackage_b import *
>>>module_n1.function_X()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named module_n1