某些Python文件无法作为模块导入

问题描述 投票:0回答:1

我必须在 python 中将目录作为模块导入。我无法单独导入文件以避免循环导入。然而,模块中只有部分文件可用。

这是我的目录结构:

./database
├── connection.py
├── exception.py
├── __init__.py
├── model
│   ├── ddd.py
│   ├── __init__.py
│   ├── model_abstract.py
│   ├── __pycache__
│   │   ├── __init__.cpython-313.pyc
│   │   ├── model_abstract.cpython-313.pyc
│   │   ├── model.cpython-313.pyc
│   │   ├── role.cpython-313.pyc
│   │   ├── session.cpython-313.pyc
│   │   └── user.cpython-313.pyc
│   ├── role.py
│   ├── session.py
│   └── user.py
└── __pycache__
    ├── connection.cpython-313.pyc
    ├── exception.cpython-313.pyc
    └── __init__.cpython-313.pyc

4 directories, 18 files

当我从 user.py 文件导入时

from database import model
print(dir(model))
x = model.role.Role.get_by_id(1)

我收到此错误:

AttributeError: module 'database.model' has no attribute 'role'
from database import model
print(dir(model))

role
不是属性之一,而
model_abstract
session
user

['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', 'model_abstract', 'session', 'user']

这段代码工作正常

model.session.UserSession.get_by_user_id(1)

发生了什么事?

ps。 role.py 在其他地方手动导入。在该文件上工作正常,但在这个文件上则不行。

python python-3.x
1个回答
0
投票

我当时就傻了。正如 @JohnGordon 和 @chrslg 指出的,在

role.py
中导入
__init__.py
可以解决问题:

from . import role
© www.soinside.com 2019 - 2024. All rights reserved.