far*_*han 5 python import flask python-2.7
__init__.py用于将磁盘上的目录标记为 Python 包目录。假设我们有文件
py/src/__init__.py
py/src/user.py
Run Code Online (Sandbox Code Playgroud)
并且 py 在您的路径上,您可以将 user.py 中的代码导入为:
import src.module
Run Code Online (Sandbox Code Playgroud)
或者
from src import user
Run Code Online (Sandbox Code Playgroud)
如果我们删除该__init__.py文件,Python 将不再在该目录中查找子模块,因此尝试导入模块将失败。
但在我的应用程序上__init__.py不起作用。
__init__ .py
__all__ = ['models', 'common']
from src.models.user import User
from src.models.post import Post
from src.models.blog import Blog
Run Code Online (Sandbox Code Playgroud)
当我运行 python app.py
错误:
Traceback (most recent call last):
File "src/app.py", line 5, in <module>
from src.models.user import User
ModuleNotFoundError: No module named 'src'
Run Code Online (Sandbox Code Playgroud)
应用程序.py文件:
import os
import sys
from flask import Flask, render_template, request, session
from src.models.user import User
app = Flask(__name__) #'__main__'
@app.route('/') # 'OUrsite.com/api/'
# def hello world ot test the first api call
def hello_method():
return render_template('login.html')
@app.route('/login')
def login_user():
email = request.form['email']
password = request.form['password']
if User.login_valid(email, password):
User.login(email)
return render_template("profile.html", email=session['email'])
if __name__ == '__main__':
app.run(port = 9100)
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?
有两件事需要理解。
virtualenv 的根目录和您的系统环境存在差异。
Virtualenv 将您的项目目录设置为其根目录。但如果您不使用 virtualenv,根目录将是您的系统目录(至少根据我的经验)。
因此,在创建时__init__py,请记住,如果没有 virtualenv 或者您没有导入任何内容,它可能是空的。
简单的__init_.py例子:
# in your __init__.py
from file import File
# now import File from package
from package import File
Run Code Online (Sandbox Code Playgroud)
我的__init__.py:
import src
from src import *
from .models.user import User
from .models.post import Post
from .models.blog import Blog
Run Code Online (Sandbox Code Playgroud)
当您导入app.py或src/models/user.py导入同一目录和子目录时,不应包含src:
from models.user import User
from common.database import Database
Run Code Online (Sandbox Code Playgroud)