将flask项目从python2更新到python3

Cha*_*han 2 python flask python-3.x

我的小瓶子项目在python2上正常运行,但是当我升级到python3时,遇到一些问题:

首先,我的文件树:

.
??? app
?   ??? app1
?   ?   ??? app1.py
?   ?   ??? __init__.py
?   ??? __init__.py
?   ??? templates
?        ??? base.html
?        ??? index.html
??? config.py
??? README.md
??? requirements.txt
??? run.py
??? shell.py
??? test.db
Run Code Online (Sandbox Code Playgroud)

run.py:

from app import app
app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)

应用程序/ __ init__.py:

from flask import Flask, url_for, render_template
from flask_admin import Admin
from flask_admin.contrib.sqla import ModelView
from flask.ext.sqlalchemy import SQLAlchemy
from flask_login import LoginManager

app = Flask(__name__)
app.config.from_object('config')
db = SQLAlchemy(app)

login_manager = LoginManager()
login_manager.init_app(app)

from app1.app1 import mod as app1
Run Code Online (Sandbox Code Playgroud)

当我使用python2运行时:

 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
 * Restarting with stat
Run Code Online (Sandbox Code Playgroud)

没问题,但在python3上:

Traceback (most recent call last):
  File "run.py", line 4, in <module>
    from app import app
  File "/home/chenhj/flask/multiapp/app/__init__.py", line 18, in <module>
    from app1.app1 import mod as app1
ImportError: No module named 'app1'
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么?菜鸟到python3需要帮助:)

Mar*_*ers 6

您正在使用隐式相对导入(Python 2模型); 您需要使用绝对引用或显式相对导入:

from .app1.app1 import mod as app1
Run Code Online (Sandbox Code Playgroud)

其中前导.信号表示其余部分相对于当前包,或者

from app.app1.app1 import mod as app1
Run Code Online (Sandbox Code Playgroud)

参见PEP 328 - 进口:多线和绝对/相对.

但是,您可能会遇到其他问题.移植并不是那么简单,请阅读" 移植到Python 3"一书中的问题.此问题是 常见的迁移问题.