2017-06-20 92 views
0

__init__.py用于将磁盘上的目录标记为Python包目录。可以说,我们有文件__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) 

我缺少的东西?

回答

1

的解决方案是这一问题。 1:首先有两点需要理解,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 

初始化的.py

import src 
from src import * 
from .models.user import User 
from .models.post import Post 
from .models.blog import Blog 

而当你在app.py或SRC /模型/ user.py这在导入同一目录&子目录中不包括src:

from models.user import User 
from common.database import Database 
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 
+0

什么未来。是的,它在src我也应该上传我的app.py文件 – Frrank

+0

我试过你的建议,但没有任何工作。 – Frrank

相关问题