找不到Python模块,相对文件夹。无法解决

时间:2019-03-16 14:05:22

标签: python python-import

在Google上有100万个答案,但我似乎无法应用任何修复程序都无法获得预期的结果!希望有人可以在这里帮助我?

我过去使用过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 个答案:

答案 0 :(得分:1)

一种让您免于扯掉头发的快速方法

def randInt(a, b):
    return 5*round(random.randint(12,100)/5)

答案 1 :(得分:0)

问题是您的测试目录不在python路径中。而且默认情况下不会。您正在尝试使用

从该目录导入
from context import Session

,并且失败。就像从基本目录执行一样,您可以使用

从该目录进行绝对导入
from tests.context import Session

或使用类似的相对导入方式。

from .context import Session