我正在开发一个包含十几个不同文件的项目。在每个文件的顶部,我有几乎相同的行导入相同的库并初始化到我的数据库的连接:
import re
import urllib2
import datetime
from sqlalchemy import *
from sqlalchemy.orm import *
from sqlalchemy.sql import *
from sqlalchemy.orm.collections import *
from table_def import Team, Player, Box_Score, Game, Name_Mapper
from datetime import timedelta
from bs4 import BeautifulSoup as bs
from datetime import date, datetime, timedelta
import numpy as np
import argparse
engine = create_engine('sqlite:///ncaaf.db', echo=False)
md = MetaData(bind=engine)
Session = sessionmaker(bind=engine)
s = Session()
teams_table = Table("teams", md, autoload=True)
games_table = Table("games", md, autoload=True)
box_scores_table = Table("box_scores", md, autoload=True)
players_table = Table("players", md, autoload=True)
names_table = Table("names", md, autoload=True)
我可以创建一个模块来导入所有这些模块并初始化此数据库连接吗?那是标准吗?或者因为某些原因而愚蠢我没有意识到?
答案 0 :(得分:2)
当您将某些内容导入模块时,它就像在模块本身中声明一样可用。所以,你可以这样做你想做的事情:
在common_imports.py
:
from datetime import date, datetime, timedelta
import numpy as np
import argparse
...
在main_module.py
:
from common_import import *
a = np.array([]) # works fine
但是,自Explicit is better than implicit以来不建议这样做。例如。如果你这样做,其他人(甚至未来的你)将无法理解所有这些导入模块的来源。相反,尝试更好地组织导入,或将模块分解为多个模块。例如,在你的导入列表中,我看到argparse,SQL的东西和numpy,我无法想象可能需要所有这些不相关的库的单个模块。
答案 1 :(得分:0)
如果您创建了一个包,则可以在__init__.py
文件中导入它们,但我建议将它们保留在可以提高代码可读性的位置。