2015-04-19 46 views
5

Khi phát triển trong Flask, tôi muốn đặt tất cả các mô hình, bộ điều khiển, ... vào tệp riêng của chúng. Bằng cách đó, tôi không phải tìm bất kỳ bộ điều khiển, mô hình nào trong một tệp lớn; nó giữ mọi thứ sạch sẽ. Nó có thể trông giống như sau:Chia tệp python lớn thành mô-đun với các phụ thuộc chung

/controllers 
    __init__.py 
    login.py 
    logout.py 
    profile.py 

Tất cả những tệp này có (hầu như) cùng phụ thuộc. Tôi không muốn đặt tất cả các phụ thuộc trong mỗi tập tin hơn và hơn nữa. Một giải pháp mà tôi đã đưa ra là sử dụng tệp depencies.py, nhập tất cả các phụ thuộc, sau đó tôi đưa vào từng tệp riêng biệt.

/controllers 
    __init__.py 
    dependencies.py (all the imports) 
    login.py (import dependencies.py) 
    logout.py (import dependencies.py) 
    profile.py (import dependencies.py) 

Tuy nhiên, đây không phải là giải pháp rất thanh lịch. Tôi tự hỏi liệu có thể làm điều gì đó giống như một số __init__.py có phụ thuộc ở trên cùng, sau đó 'bao gồm' các tệp riêng biệt và mọi thứ đều chạy theo cách đó, để bạn không thực sự cần bao gồm các phụ thuộc chung trong mỗi tập tin.

Ví dụ về những gì tôi muốn làm (không hoạt động): nhập khẩu cụ thể

#common dependencies 
from app import mail 
from flask import session 
... 
#actual models (which depend on these dependencies) 
from user import User 
from code import Code 
from role import Role 
+0

Tôi chỉ muốn đưa phụ thuộc mỗi module trong mô-đun. Nếu mỗi mô-đun A B C có tất cả các phụ thuộc giống nhau X Y Z, thì có thể có một số hành vi phổ biến mà bạn có thể trích ra từ A B C và vào D. Sau đó A B C có thể phụ thuộc vào D thay vì X Y Z. –

Trả lời

1

file

Chỉ nhập dependancies cần thiết trong mỗi hoặc các tập tin của bạn. Nếu profile chỉ cần flask, chỉ nhập tệp đó trong tệp. Nếu login.py cần flaskapp, hãy nhập cả hai vào tệp đó. Trừ khi mô-đun bên thứ 3 thứ thực sự được sử dụng trong mã của __init__.py, bạn không cần phải nhập nó ở đó. Tùy thuộc vào cách bạn cuối cùng sử dụng gói của mình, bạn có thể đặt danh sách __all__ với các mô-đun của mình trong __init__.py.

Tài liệu tham khảo:

  1. Nhập khẩu duy nhất từng tải một mô-đun một lần. Bất kỳ nhập khẩu nào sau đó chỉ cần thêm nó vào không gian tên hiện tại.
    - another answer

  2. Vì lý do hiệu quả, mỗi mô-đun chỉ được nhập khẩu một lần mỗi phiên dịch viên.
    - python docs

  3. __all__ explanation

Các vấn đề liên quan