Python import 问题

2017-03-23 00:03:23 +08:00
 ysicing
app/__init__.py
...
from flask_redis import FlaskRedis
from flask_login import LoginManager
import os
...
login_manager = LoginManager()
login_manager.session_protection = 'strong'
login_manager.login_view = 'auth.oauth'

def create_app(config="app.config"):
    app = Flask(__name__)
    with app.app_context():
        app.config.from_object(config)
...
        redis_store = FlaskRedis()
        redis_store.init_app(app)
        login_manager.init_app(app)
...
----

app/models.py

from . import login_manager

但是这样 import 会报错 ImportError: cannot import name 'login_manager' 参考了 Flask Web 开发一书

2788 次点击
所在节点    Python
9 条回复
billlee
2017-03-23 00:09:46 +08:00
我不能重现,你需要把你启动程序的方式说一下
terence4444
2017-03-23 00:23:43 +08:00
这种情况不用 from 直接 import login_manager 就可以了,但 from 用包相对路径我这的确也不行,不知道怎么搞。
freestyle
2017-03-23 00:41:49 +08:00
Python 相关的问题得写 py2 还是 py3 啊大兄弟
ysicing
2017-03-23 01:07:20 +08:00
@terence4444 直接 import 也不行的
ysicing
2017-03-23 01:17:51 +08:00
lt0136
2017-03-23 01:19:13 +08:00
有循环导入的问题。。
把所有 import 自己代码的地方比如 blueprint 放在 creat_app()里面
能放后面就放后面
仔细分析一下包的导入过程你就知道为啥了。。
ysicing
2017-03-23 01:42:51 +08:00
@lt0136 哦哦,我琢磨琢磨
zsz
2017-03-23 02:00:31 +08:00
@ysicing 解决循环引用就好了, 尽量整理好导入的模块关系


有问题可以加我们的群问,这样效率更高,这个群是一群工程师组建的面向初学者的
Python Linux 学习群, qq 群号: 278529278 ,
Php Linux 学习群, qq 群号: 476648701 ,
非商业性质,拒绝广告,只接收真正想学这方面技术的朋友,交流学习,申请请说明来自 v2ex
ap010gi2e
2017-03-23 12:47:14 +08:00
我感觉题主是想问 from...import...的相对导入问题。当要在 python 中使用相对导入模块,对目录结构是有要求的。
一、执行相对导入的模块(.py )文件不能作为顶层模块执行该文件夹中的 py 文件的。
二、相对导入的文件夹必须要被 python 解释器理解为包的(也就是必须要包含__init__.py )文件。
同时满足上述两个条件,才可以进行 from import 的相对导入模块的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/349613

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX