ModuleNotFoundError в проекте Python - PullRequest
0 голосов
/ 01 мая 2020

У меня есть следующая структура проекта в Python (... означает, что у меня n файлов crawler_.py).

project
├── crawlers
│   ├── __init__.py
│   ├── crawler_1.py
│   ├── crawler_2.py
│   ...
│   ├── crawler_n.py
│   └── useful_functions.py
├── main.py
└── __init__.py

Мне нужно импортировать все сканеры из сканера в основную, поэтому я используйте это.

# main.py
from crawlers import crawler_1
from crawlers import crawler_2
...
from crawlers import crawler_n

Но мне также нужно useful_functions.py во всех файлах crawler_.py, поэтому я использую это в каждом.

# crawler_.py
import useful_functions

Но когда я запустил main.py Я получил ModuleNotFoundError: No module named 'useful_functions', когда он попытался импортировать crawler_1.

Поэтому я попробовал следующее

# crawler_.py
from crawlers import useful_functions

И оно работает, когда я запускаю main.py. Проблема в том, что я могу захотеть запустить только один из crawler_.py напрямую. Используя этот последний оператор импорта, я получаю ModuleNotFoundError: No module named 'crawlers'. Не уверен, как решить эту проблему, если есть что-то внутри кода, который я должен скорректировать, или если структура, которую я использую, в корне неверна (у меня все в порядке с настройкой структуры проекта).

1 Ответ

2 голосов
/ 01 мая 2020

Вы можете использовать это внутри crawler_n.py

if __name__ == '__main__':
    import useful_functions
else:
    import crawlers.useful_functions as useful_functions

__name__ == '__main__', чтобы проверить, вызван ли модуль или импортирован, и, соответственно, выполнить импорт соответственно.

...