2017-06-20 6 views
0

__init__.pyは、ディスク上のディレクトリをPythonパッケージディレクトリとしてマークするために使用されます。__init__.pyはpythonアプリケーションのすべてのディレクトリになければなりませんか?

import src.module 

または

from src import user 

は、我々は削除する場合:として、あなたはuser.pyでコードをインポートすることができ、我々は

py/src/__init__.py 
py/src/user.py 

とPYがパス上にあるファイルを持って言うことができます__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のルートディレクトリとシステム環境に違いがあることを理解するには、2つのことがあります。 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 /モデル/ 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

未来。はい、私はあなたのapp.pyファイルをアップロードする必要があります – Frrank

+0

私はあなたの提案を試みたが、何も動作していません。 – Frrank

関連する問題