Мне нужна помощь в импорте модулей в тесты из папки брата

#python #python-3.x #jupyter-notebook

Вопрос:

При попытке импортировать модуль я получаю ошибку импорта «не удалось импортировать модуль».

Структура файла

 src
    modules
    __init__.py
        authenticate_developer
        twttier_importer
    notebooks
        main.ipynb
    unit_tests
        test_authenticate_developer
 

В test_authenticate_developer

 import requests
from nose.tools import assert_true
import os
import sys
sys.path.append(os.path.abspath('../modules'))
import settings
import twitter_importer #returns import error
import authenticate_developer #returns import error
 

Однако, когда я использую тот же синтаксис в своих записных книжках, это успешно.

 import sys
import os
sys.path.append(os.path.abspath('../modules'))
sys.path.append(os.path.abspath('../'))
import twitter_importer
import authenticate_developer
import settings
 

Я просмотрел существующие ответы и опробовал их, т. Е. удалил init.py из корневой папки и удаление или добавление init.py в папку «тесты». Кажется, ни один из них не работает на меня.

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

1. Пожалуйста, опубликуйте код в виде текста, а не изображений. Это облегчает нам повторение проблемы.

2. @Sid спасибо за отзыв. Я отредактировал с помощью текста

Ответ №1:

Мне удалось найти кого-нибудь, кто помог бы мне с этим, и вот как мы с этим справились.

  src
    modules
    __init__.py
        authenticate_developer
        twttier_importer
    notebooks
        main.ipynb
    unit_tests
    __init__.py
        test_authenticate_developer
 

В test_authenticate_developer

 import os,sys,inspect
sys.path.append(os.path.abspath('../modules'))
#This is to access the parent folder in order to import config
currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
parentdir = os.path.dirname(currentdir)
sys.path.insert(0,parentdir)

import config
from modules.authenticate_developer import Authenticate
 

Я не могу объяснить, почему я должен делать это по-другому в тестовых файлах, но это моя работа