私はFlaskのプロジェクトに取り組んでおり、循環的なインポートに問題があります。フラスコ - 大きなアプリで循環輸入を防ぐにはどうすればいいですか?
マイアプリの構造は次のようになります。
.
├── api
│ ├── __init__.py
│ ├── schema.py
│ └── sender.py
├── app.py
├── config.py
├── README.md
├── run.sh
├── static
│ ├── css
│ │ ├── base.css
│ │ ├── index.css
│ │ └── model.css
│ └── index.html
├── templates
│ ├── base.html
│ ├── model.html
│ ├── schema_add.html
│ ├── schema.html
│ └── table.html
└── views
├── auth.py
├── error_handler.py
├── __init__.py
├── model.py
├── schema.py
└── table.py
ソースコードはthis
Here's a trace of error:
Traceback (most recent call last):
File "./../anton_temp/app.py", line 3, in <module>
from views import *
File
"/home/shubham1172/Documents/Anton/anton_temp/views/__init__.py", line
16, in <module>
from .auth import *
File "/home/shubham1172/Documents/Anton/anton_temp/views/auth.py",
line 4, in <module>
from app import setConnection, getConnection, closeConnection
File "/home/shubham1172/Documents/Anton/anton_temp/app.py", line 4,
in <module>
from api import *
File "/home/shubham1172/Documents/Anton/anton_temp/api/__init__.py",
line 13, in <module>
from .schema import *
File "/home/shubham1172/Documents/Anton/anton_temp/api/schema.py",
line 5, in <module>
from app import getConnection
ImportError: cannot import name 'getConnection'
問題は、私は私のアプリで私の青写真(ビューおよびAPI)を含める必要がある
で提供されています。これらの青写真のための のinitファイルには、さらに今度はアプリからいくつかの機能を含める必要がありPYファイルが含まれています。
私は、外部ファイルにこれらの関数が含まれるようにどこかで読ん青写真から呼び出し、その後extension.pyと言うが、アプリで私の関数は、そのconfigオブジェクトのための「アプリ」に参照が含まれています。
これを修正するにはどうすればよいですか?
EDIT
としては、私は私のコードをリファクタリングする必要があります、と指摘しました。 Thisには同じ問題の例が示され、解決策が示されました。しかし、私の拡張関数は、アプリケーションのconfigへの呼び出しを必要とする、すなわち
A.py
import B
from C import dependency
B.py
from C import dependency
C.py
def dependency():
#Use A.config here <----------
pass
これを解決する方法はありますか?
EDIT
私は私のコードをリファクタリングすることによってそれを解決しました。 私はapp.configを簡単な関数呼び出しで別のファイルにエクスポートできることを理解しました。
C.py
obj = None
def setObj(object):
obj = object
def dependency():
#use obj now
pass
setObj(objが)今A.pyから呼び出すことができます!この問題を回避しようとする
通常、循環依存関係はプロジェクトの構造が悪いことを示します。他のファイルに依存するコードを抽出します。これは多くのものを動かす必要があるかもしれません。 – Carcigenicate
構造を教えてもらえますか? @カルシゲネイト? –