Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x python相对导入未按预期工作_Python 3.x_Flask_Sqlalchemy_Flask Sqlalchemy - Fatal编程技术网

Python 3.x python相对导入未按预期工作

Python 3.x python相对导入未按预期工作,python-3.x,flask,sqlalchemy,flask-sqlalchemy,Python 3.x,Flask,Sqlalchemy,Flask Sqlalchemy,我有以下模块包组织 models ├── __init__.py ├── __pycache__ │   ├── __init__.cpython-34.pyc │   ├── model.cpython-34.pyc │   └── user.cpython-34.pyc └── user.py 1 directory, 5 files 以下是我的\uuuu init\uuuu.py的内容: from flask_sqlalchemy import SQLAlchemy db = SQL

我有以下模块包组织

models
├── __init__.py
├── __pycache__
│   ├── __init__.cpython-34.pyc
│   ├── model.cpython-34.pyc
│   └── user.cpython-34.pyc
└── user.py

1 directory, 5 files
以下是我的
\uuuu init\uuuu.py
的内容:

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

from .user import User
跑步时

>>> from models import *
>>> dir()
['SQLAlchemy', 'User', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'db', 'user']
请注意,
user
也在列表中,而我在
\uuuu init\uuuu.py
中显式地从.user导入user

我无法理解这种行为,因为如果我只是这么做

>>> from models.user import User
>>> dir()
['User', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__']
I获取
用户

如何使用
\uuuu init\uuuuu.py
文件实现相同的结果,即如何仅导入
db
用户
,而不导入
用户

注意:
user
是模块
user.py
user
是其中的类

添加行:

__all__ = ['User', 'db']
\uuuu init\uuuuuy.py
的开头

\uuuu all\uuuu
白名单将由
从模块导入*
导入的名称

从:

模块现在可以通过定义包含将要导入的名称列表的
\uuuu all\uuuuu
属性,控制在使用
from module import*
时导入哪些名称。一个常见的抱怨是,如果模块导入其他模块,例如
sys或
string
,则来自模块的
import*会将它们添加到导入模块的命名空间中。要解决此问题,只需在
\uuuu all\uuu
中列出公共名称:

# List public names
  __all__ = ['Database', 'open']

不要导入*
。它将导入模块的公共名称空间内的所有内容。@dirn我知道,但是
user
不在模块的公共名称空间内,对吗?可能是