__init__.py
用于将磁盘上的目录标记为Python包目录。假设我们有文件
py/src/__init__.py
py/src/user.py
和py在你的路径上,你可以在user.py中导入代码:
import src.module
或
from src import user
如果我们删除__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
当我运行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'
App.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)
我错过了什么吗?
答案 0 :(得分:2)
解决这个问题。 1:首先要了解两件事情,virtualenv的根目录与您的系统环境有所不同。 Virtualenv将你的项目目录设置为它的root。但是如果你不使用virtualenv,根据我的经验,root将是你的系统目录。因此,在创建__init__py时请记住,如果没有virtualenv或者您没有导入任何内容,它可以为空。
简单的__init_.py示例:
# in your __init__.py
from file import File
# now import File from package
from package import File
我的 init .py
import src
from src import *
from .models.user import User
from .models.post import Post
from .models.blog import Blog
当您在同一目录中的app.py或src / models / user.py中导入时子目录,你不会包括src:
from models.user import User
from common.database import Database
答案 1 :(得分:1)
您没有先导入src
。
import src
__all__ = ['models', 'common']
from src.models.user import User
from src.models.post import Post
from src.models.blog import Blog
如果是src/__init__.py
,您可以使用相对导入:
from __future__ import absolute_import
from .models.user import User
from .models.post import Post
from .models.blog import Blog