Импорт модуля из подпапки

Я хочу импортировать подпапки в качестве модулей. Поэтому каждая подпапка содержит __init__.py . Моя структура папок выглядит так:

 src\ main.py dirFoo\ __init__.py foofactory.py dirFoo1\ __init__.py foo1.py dirFoo2\ __init__.py foo2.py 

В моем основном скрипте я импортирую

 from dirFoo.foofactory import FooFactory 

В этом заводском файле я включаю вспомогательные модули:

 from dirFoo1.foo1 import Foo1 from dirFoo2.foo2 import Foo2 

Если я позвоню своему foofactory, я получаю ошибку, что python не может импортировать подмодули foo1 и foo2:

 Traceback (most recent call last): File "/Users/tmp/src/main.py", line 1, in <module> from dirFoo.foofactory import FooFactory File "/Users/tmp/src/dirFoo/foofactory.py", line 1, in <module> from dirFoo1.foo1 import Foo1 ImportError: No module named dirFoo1.foo1 

    3 Solutions collect form web for “Импорт модуля из подпапки”

    Вам не нужно возиться с вашим PYTHONPATH или sys.path здесь.

    Чтобы правильно использовать абсолютный импорт в пакете, вы должны также включить «root» packagename, например:

     from dirFoo.dirFoo1.foo1 import Foo1 from dirFoo.dirFoo2.foo2 import Foo2 

    Или вы можете использовать относительный импорт :

     from .dirfoo1.foo1 import Foo1 from .dirfoo1.foo1 import Foo2 

    Установите переменную среды PYTHONPATH. Например, как этот PYTHONPATH =.: .. (для семейства * nix).

    Также вы можете вручную добавить текущий каталог (src в вашем случае) в pythonpath:

     import os import sys sys.path.insert(0, os.getcwd()) 

    Просто чтобы сообщить здесь. (от новичка, keviv22)

    Никогда и никогда ради собственного блага не называйте папки или файлы с пробелами или символами типа «-» или «_». Если вы это сделаете, вы можете столкнуться с несколькими проблемами. например, моя, хотя ваша команда для импорта правильная, вы не сможете успешно импортировать нужные файлы, которые доступны в таких папках с именами.

    Недопустимые имена папок:

    • Generic-классы-папка
    • Generic_Classes_Folder

    действительные имена папок для выше:

    • GenericClassesFolder или Genericclassesfolder или genericClassesFolder (или вроде этого без пробелов или специальных символов среди слов)

    Какую ошибку я сделал:

    рассмотрим файловую структуру.

     Parent . __init__.py . Setup .. __init__.py .. Generic-Class-Folder ... __init__.py ... targetClass.py . Check .. __init__.py .. testFile.py 

    Что я хотел сделать?

    • от testFile.py, я хотел импортировать файл targetClass.py в файл Generic-Class-Folder для использования функции с именем «functionExecute» в файле «targetClass.py»

    Какую команду я сделал?

    • из 'testFile.py', написал команду, из функции импорта Core.Generic-Class-Folder.targetClassExecute
    • Получены такие ошибки, как «SyntaxError: недопустимый синтаксис»

    Пробовал много поисков и просматривал много вопросов о stackoverflow и не мог решить, что пошло не так. Я перекрестно проверял мои файлы несколько раз, я использовал файл __init__.py , вставил путь к среде и очень беспокоился о том, что пошло не так ……

    И после долгого долгого времени, я понял это во время разговора с моим другом. Я немного глуп, чтобы использовать такие соглашения об именах. Я никогда не должен использовать пробел или специальные символы для определения имени для любой папки или файла. Итак, это то, что я хотел передать. Хорошего дня!

    (извините за огромную почту над этим … просто позволяю моим разочарованиям идти …. 🙂 Спасибо!)

    Python - лучший язык программирования в мире.