V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
honmaple
V2EX  ›  Flask

flask 加载模块问题

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

    项目结构
    ├── 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
    循环引用了吧
    cppgohan
        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   ·   实用小工具   ·   2762 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 13:45 · PVG 21:45 · LAX 05:45 · JFK 08:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.