Модуль Python не найден, относительная папка.Не могу понять это - PullRequest
1 голос
/ 16 марта 2019

На Google есть миллион ответов, но я не могу применить какие-либо исправления и получить ожидаемый результат!Надеюсь, кто-нибудь может помочь мне здесь?

Я использовал Python в прошлом, но уже давно, я переписываю старый проект прошлого года с использованием SQLAlchemy и SQLite3.

Проблема в том,Я не могу заставить мои тесты играть хорошо.Я пытаюсь отделить свою тестовую базу данных от рабочей базы данных, поэтому у меня следующая структура файла:

    .
├── fleet_manager
│   ├── controller
│   │   └── customer_controller.py
│   ├── database.db
│   ├── fleet_manager.py
│   ├── model
│   │   ├── __init__.py
│   │   ├── models.py
│   └── view
├── Pipfile
├── Pipfile.lock
└── tests
    ├── context.py
    ├── __init__.py
    ├── test_customer_controller.py
    ├── test.db
    └── test_models.py

Итак, я создал файл context.py, и здесь у меня есть фабрика движков / сеансов SQLAlchemy.Это тот файл, который не могут найти мои тестовые файлы.

# test_models.py

from mamba import description, context, it, before
from expects import expect, equal, be_a, be_none
from sqlalchemy import create_engine, Table
from sqlalchemy.engine import Engine
from sqlalchemy.orm import sessionmaker


from context import Session # < this mofo here
from fleet_manager.model.models import (
    Equipment,
    EquipmentType,
    Discipline,
    Size,
    Make,
    Model,
    Customer,
    Base)

Таким образом, в основном вышеупомянутый файл вообще не находит контекст

# context.py

from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine

engine = create_engine('sqlite:///tests/test.db', echo=True)
Session = sessionmaker(bind=engine)

Это ошибка, которую я получаю (опущенолишний след):

ModuleNotFoundError: No module named 'tests/test_models'

Я уже пробовал кучу вещей.Я попытался изменить путь с помощью os.path, а также .context в отличие от контекста, но все еще ничего.Первоначально у меня была эта проблема при попытке доступа к файлу models.py, но это потому, что я забыл поместить в папку init .py!

Может кто-нибудь помочь мне здесь?Вырывая мои волосы.

Ответы [ 2 ]

1 голос
/ 16 марта 2019

один быстрый способ уберечь вас от вырывания волос

import sys
sys.path.append("/path/to/your/package_or_module")
0 голосов
/ 16 марта 2019

Проблема в том, что в вашем каталоге тестов нет пути к Python. И это не будет по умолчанию. Вы пытаетесь импортировать из этого каталога, используя

from context import Session

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

from tests.context import Session

Или используйте относительный импорт, как этот.

from .context import Session
...