flask 加载模块问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
honmaple
V2EX    Flask

flask 加载模块问题

  •  
  •   honmaple 2015-11-23 10:49:40 +08:00 3458 次点击
    这是一个创建于 3610 天前的主题,其中的信息可能已经有所发展或是发生改变。

    项目结构
    ├── app
    │ ├── forms
    │ │ ├── init.py
    │ │ ├── login.py

    │ ├── init.py

    │ └── views
    │ ├── admin.py
    │ ├── blog.py
    │ ├── book.py
    │ ├── init.py

    ├── config
    │ ├── default.py
    │ ├── development.py
    │ ├── init.py

    run.py 内容

    from app import create_app app = create_app() if __name__ == '__main__': app.run() 

    app/int.py

    def create_app(): app = Flask(__name__) cOnfig= load_config() app.config.from_object(config) register_routes(app) return app def register_routes(app): from .views import admin, blog, book app.register_blueprint(admin.site, url_prefix='') app.register_blueprint(blog.site, url_prefix='/blog') app.register_blueprint(book.site, url_prefix='/book') 

    views/blog.py

    from flask_flatpages import FlatPages from .. import create_app site = Blueprint('blog',__name__) app = create_app() flatpages = FlatPages(app) 

    运行时出错

    Traceback (most recent call last):
    File "run.py", line 13, in <module>
    app = create_app()
    File "/home/honmaple/website/app/__init__.py", line 21, in create_app
    register_routes(app)
    File "/home/honmaple/website/app/__init__.py", line 29, in register_routes
    from .views import admin, blog, book
    File "/home/honmaple/website/app/views/blog.py", line 18, in <module>
    app = create_app()
    File "/home/honmaple/website/app/__init__.py", line 21, in create_app
    register_routes(app)
    File "/home/honmaple/website/app/__init__.py", line 29, in register_routes
    from .views import admin, blog, book
    ImportError: cannot import name 'blog'

    views/admin.py book.py 与 blog.py 不同的地方就是

    from .. import create_app
    还有我本机是 python3.5,服务器上是 python3.4,本机测试正常,服务器上运行出错,难道是版本的原因

    第 1 条附言    2015-12-02 11:03:53 +08:00
    网站已基本运行,地址:http://honmaple.com
    不过很多都没优化,尤其是数据库
    16 条回复    2015-11-29 15:58:54 +08:00
    honmaple
        1
    honmaple  
    OP
       2015-11-23 10:52:57 +08:00
    billion
        2
    billion  
       2015-11-23 11:10:16 +08:00
    每个文件夹下面的 init 文件,文件名前后都有两个下划线__init__.py
    honmaple
        3
    honmaple  
    OP
       2015-11-23 11:14:47 +08:00
    @billion 这个有的,可能是没显示出来
    yangtukun1412
        4
    yangtukun1412  
       2015-11-23 11:55:28 +08:00
    循环引用了吧
        5
    cppgohan  
       2015-11-23 11:57:48 +08:00
    lz 搞定了吗?

    最近一年正职写 android, 偶尔写 python, 也都直接用完整包名的 import...

    `from app.views import admin, blog, book`
    honmaple
        6
    honmaple  
    OP
       2015-11-23 12:13:29 +08:00
    @yangtukun1412 什么意思?
    honmaple
        7
    honmaple  
    OP
       2015-11-23 12:15:26 +08:00
    @cppgohan 还没搞定,本地测试是正常的,到了服务器上就出错了,唉,准备换个版本试试
    chenkun0128
        8
    chenkun0128  
       2015-11-23 12:45:41 +08:00
    sys.path.insert(0, os.path.dirname(__file__)) ?_?
    honmaple
        9
    honmaple  
    OP
       2015-11-23 13:05:08 +08:00
    原来的问题搞定了,
    def register_routes(app):
    from .views import admin, blog, book
    app.register_blueprint(admin.site, url_prefix='')
    app.register_blueprint(blog.site, url_prefix='/blog')
    app.register_blueprint(book.site, url_prefix='/book')
    改成
    def register_routes(app):
    from .views import admin, book
    app.register_blueprint(admin.site, url_prefix='')
    app.register_blueprint(book.site, url_prefix='/book')
    from .views.blog import site
    app.register_blueprint(site, url_prefix='/blog')
    暂时可以运行了,不过数据库又出问题了,现在正在搞定数据库,
    python 部署果然是个问题
    florije
        10
    florije  
       2015-11-23 13:15:03 +08:00
    blog.py 中的 register_pages 这个循环引用了,然后楼主也是不遵循 pep8 啊……
    # -*- coding=UTF-8 -*-一般放文件最开始位置,要跑起来 LZ 的应用也很费劲啊……
    florije
        11
    florije  
       2015-11-23 13:20:02 +08:00
    不过明显看出来 LZ 的 django 的功底很深厚啊,写的代码还是很不错,而且不是用 IDE 写的,想必有 3+年的 python 经验了吧。
    honmaple
        12
    honmaple  
    OP
       2015-11-23 13:40:13 +08:00
    @florije 额,别嘲讽我了,代码上还有很多重复工作没优化,不过我只有一年经验,刚入门 django 觉得 django 太大不自由就转 flask 了。。。话说你是怎么看出我不是用 IDE 写的(用的 vim)
    honmaple
        13
    honmaple  
    OP
       2015-11-23 13:44:15 +08:00
    @florije 问一下上个问题,我将
    register_routes(app)
    register_assets(app)
    register_db(app)
    register_jinja2(app)
    写到函数外是不是就没有循环引用了
    florije
        14
    florije  
       2015-11-23 13:49:11 +08:00
    @honmaple 没有想到是 vim ,只是想是类似的比如说 sublime 的工具,因为很多代码没有格式化(ps ,一般 IDE 都带这种功能,起码我让小伙伴提交前都必须 reformat 一下),这种就是顺序问题,看报错里面也能看出来端倪,就是报了两次 register_routes(app)这个错误。这个没有详细看代码就是看了报错提示的两个文件,简单分析了下。
    gevin
        15
    gevin  
       2015-11-24 08:30:57 +08:00
    我也在用 flask 写博客系统,我们可以交流一下

    https://github.com/flyhigher139/OctBlog
    honmaple
        16
    honmaple  
    OP
       2015-11-29 15:58:54 +08:00
    @gevin 好的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1205 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 38ms UTC 17:28 PVG 01:28 LAX 10:28 JFK 13:28
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86