Ошибка при импорте модуля из другой папки в том же родительском каталоге - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть следующая структура пакета python:

rkstr8/cloud/batch.py
rkstr8/profiling/test.py

Я пытаюсь импортировать класс с именем BatchJobListStatusPoller из batch.py ​​в test.py, но он выдает мне ошибку: ModuleNotFoundError: No module named 'rkstr8' когда я запускаю этот оператор импорта в test.py:

from rkstr8.cloud.batch import BatchJobListStatusPoller

Папка rkstr8 /, а также подпапки cloud / и profiling / имеют все __init__.py.

Что я здесь не так делаю?

1 Ответ

0 голосов
/ 14 сентября 2018

Проблема в том, что Python импортирует модули только из каталогов / подкаталогов, куда бы вы ни запускали вашу программу python test.py. Он также ищет модули в переменной sys.path, которая включает стандартные библиотечные и все установленные из pip. Я могу подумать о двух способах решения этой проблемы, один из которых является более стандартным, а другой - неортодоксальным обходным путем.

  1. Первым способом было бы иметь скрипт непосредственно в папке aws-sfn-tutorial, который может называться start_test.py. Его единственная цель - вызвать ваш test.py скрипт при запуске и передать любые аргументы командной строки.
    Это позволит вашему скрипту test.py правильно найти все модули python внутри папки aws-sfn-tutorial.

  2. Вторым способом будет изменение переменной sys.path в test.py, чтобы добавить путь к файлу, который вы хотите импортировать.

    • Вы можете указать относительный путь ../, который перемещает его на одну папку вверх относительно текущего пути
    • Или вы можете указать абсолютный путь к папке

Пример 2:

import sys
sys.path.append('../') # Or use the absolute path here instead

# After adding to sys.path import your module
from cloud.batch import BatchJobListStatusPoller 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...