有没有办法在Python中管理大量的导入语句?

问题描述

我正在使用Flask-RESTFul API,在我的app.py文件中,有很多导入语句,如下所示。

from flask import Flask
from flask_restful import Api

from apis.ChambAvail import ChambAvail
from apis.ChambAvailBal import ChambAvailBal
from apis.ChambTwInhibit import ChambTwInhibit
from apis.CurrentWip import CurrentWip
from apis.Detail import Detail
from apis.IncomingWip import IncomingWip
from apis.Info import Info
from apis.Manage import Manage
from apis.MfCount import MfCount
from apis.OtherHold import OtherHold
from apis.PqeDue import PqeDue
from apis.QualInhibit import QualInhibit
from apis.ReleaseBef import ReleaseBef
from apis.RfInhibit import RfInhibit
from apis.SketchDetailedLot import SketchDetailedLot
from apis.SketchLotDetail import SketchLotDetail
from apis.SketchMainDetail import SketchMainDetail
from apis.SketchMainRC import SketchMainRC
from apis.SketchDesignInfo import SketchDesignInfo
from apis.SketchOneDetail import SketchOneDetail
from apis.SketchOneLotDetail import SketchOneLotDetail
from apis.SketchOneMain import SketchOneMain
from apis.SketchOneNearestLot import SketchOneNearestLot
from apis.SketchTimeList import SketchTimeList
from apis.SketchWsgList import SketchWsgList
from apis.TakeEquipDetail import TakeEquipDetail
from apis.TakeEquipLotDetail import TakeEquipLotDetail
from apis.TakeEquipMain import TakeEquipMain
from apis.TakeOneDetail import TakeOneDetail
from apis.TakeOneEquipData import TakeOneEquipData
from apis.TakeOneMain import TakeOneMain
from apis.TakeOneRADetail import TakeOneRADetail
from apis.UpdBufInputCapacity import UpdBufInputCapacity
from apis.UpdEohInputCapacity import UpdEohInputCapacity
from dbmanager import datasource
from logmanager.setlogger import logger
from utils import config_reader

env = 'test'
app = Flask(__name__)
api = Api(app)

api.add_resource(SketchMainRC,'/SketchMainrc')
api.add_resource(SketchDesignInfo,'/SketchDesigninfo')
api.add_resource(SketchWsgList,'/Sketchwsglist')
api.add_resource(SketchMainDetail,'/Sketchmaindetail')
api.add_resource(SketchLotDetail,'/Sketchlotdetail')
api.add_resource(SketchOneMain,'/SketchOneMain')
api.add_resource(SketchOneDetail,'/SketchOnedetail')
api.add_resource(SketchOneLotDetail,'/SketchOnelotdetail')
api.add_resource(SketchOneNearestLot,'/SketchOnenearestlot')
api.add_resource(SketchDetailedLot,'/Sketchdetailedlot')
api.add_resource(SketchTimeList,'/Sketchtimelist')
api.add_resource(TakeEquipMain,'/TakeequipMain')
api.add_resource(TakeEquipDetail,'/Takeequipdetail')
api.add_resource(TakeEquipLotDetail,'/Takeequiplotdetail')
api.add_resource(TakeOneMain,'/TakeOneMain')
api.add_resource(TakeOneDetail,'/TakeOnedetail')
api.add_resource(TakeOneRADetail,'/TakeOneradetail')
api.add_resource(TakeOneEquipData,'/TakeOneequipData')
api.add_resource(ChambAvail,'/chambavail')
api.add_resource(ChambAvailBal,'/chambavailbal')
api.add_resource(ChambTwInhibit,'/chambtwinhibit')
api.add_resource(CurrentWip,'/currentwip')
api.add_resource(IncomingWip,'/incomingwip')
api.add_resource(Detail,'/detail')
api.add_resource(Manage,'/manage')
api.add_resource(MfCount,'/mfcount')
api.add_resource(OtherHold,'/otherhold')
api.add_resource(PqeDue,'/pqedue')
api.add_resource(QualInhibit,'/qualinhibit')
api.add_resource(ReleaseBef,'/releasebef')
api.add_resource(RfInhibit,'/rfinhibit')
api.add_resource(Info,'/info')
api.add_resource(InputCapacity,'/inputcapacity')
api.add_resource(InputCapacity,'/inputcapacity')

app.ls_sf_db_env = 'test'
app.ls_config = config_reader.get_config('test')

# Initialise the connection pool
datasource.initial_all_fab_engine(app)

if __name__ == '__main__':
    logger.info('Starting the server')
    app.run(port=5000,debug=True)

下面是我的项目结构。

enter image description here

这些只是我完成的一些API,还有100多个。我是Python的新手,尤其是Flask-RESTFul API开发。每个API都有单独的类,我认为代码看起来更干净。但是在我的app.py文件中,这些导入语句正在堆积。在我的app.py文件中,有没有更好的方法添加/管理这些import语句以及add.resource()语句?有人可以让我知道是否可以以其他方式导入所有这些语句并保持我的app.py干净吗? 任何帮助表示赞赏。

解决方法

我会做一些基于路径的魔术。

以下代码段将列出import com.hortonworks.hwc.HiveWarehouseSession df.write .format("com.hortonworks.spark.sql.hive.llap.HiveWarehouseConnector") .mode("append") .option("table","myDatabase.myTable") .save() 子目录中的所有https_redirect@file文件,将它们导入为模块,提取与该文件相同名称的类,并将其注册在.py端点下

apis/