我必须在 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 在其他地方手动导入。在该文件上工作正常,但在这个文件上则不行。
我当时就傻了。正如 @JohnGordon 和 @chrslg 指出的,在
role.py
中导入 __init__.py
可以解决问题:
from . import role