首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python模块导入难题(模块从子模块)

python模块导入难题(模块从子模块)
EN

Stack Overflow用户
提问于 2014-07-28 13:43:21
回答 1查看 678关注 0票数 3

我的项目结构如下:

代码语言:javascript
复制
./app/__init__.py
./app/main/__init__.py
./app/main/views.py
./app/models.py
./app/resources/__init__.py
./app/resources/changesAPI.py
./config.py
./manage.py

app/models.py文件有以下行:

代码语言:javascript
复制
from app import db

dbapp/__init__.py中定义

代码语言:javascript
复制
db = SQLAlchemy()

我从models.py从app/resources/__init__.py导入类

代码语言:javascript
复制
from app.models import User, Task, TaskChange, Revision

但是,当模型试图导入db时,它会失败。

代码语言:javascript
复制
Traceback (most recent call last):
  File "manage.py", line 5, in <module>
    from app import create_app, db, api
  File "/Users/nahuel/proj/ptcp/app/__init__.py", line 16, in <module>
    from app.resources.changesAPI import ChangesAPI
  File "/Users/nahuel/proj/ptcp/app/resources/__init__.py", line 5, in <module>
    from app.models import User, Task, TaskChange, Revision
  File "/Users/nahuel/proj/ptcp/app/models.py", line 1, in <module>
    from app import db
ImportError: cannot import name db

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-28 13:55:17

你有一个圆形进口。

您正在从create_appdbapi中导入manage.py,这会触发app.resources.changesAPI模块的导入,然后app.resources.changesAPI模块将触发app/resources__init__.py包的导入,然后尝试导入models,这将失败,因为db尚未在app/__init__.py中定义。

您需要将ChangesAPI导入到在app/__init__.py文件中定义db的行后面。app/__init__.py中在from app.resources.changesAPI import ChangesAPI之前定义的任何名称都可供您的子包使用,而后面的名称则不可用。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24996646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档