2013-10-26 5 views
1

Я разрабатываю проект, содержащий около десятка различных файлов. В верхней части каждого файла у меня есть почти идентичные строки, которые импортируют ту же библиотеку и инициализируют подключение к моей БД:Python - библиотека для импорта библиотек

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) 

Могу ли я сделать модуль для импорта всех этих модулей и инициализировать это соединение DB? Это стандарт? Или, по какой-то причине, я не понимаю?

+0

Вам нужны _все_ те из десятков других файлов? Если это так, это то, что вы делаете неправильно. – martineau

+0

ну не совсем, но я просто копирую и вставляю их все из файла в файл, а затем удаляю одну строку для файла здесь, добавляем одну строку в файл там и т. Д. – appleLover

+0

Импортирование именно того, что вам нужно, лучше, чем импорт группы вещей «на всякий случай» они нужны, это также более явное, что считается хорошей вещью. Также обратите внимание, что импорт того, что уже было импортировано в тот же или другой файл, довольно дешево обрабатывается. – martineau

ответ

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, и я не могу создать единый модуль, который может понадобиться для всех этих несвязанных библиотек.

0

Если вы создаете пакет, вы можете импортировать его в файл __init__.py, хотя я бы предложил оставить их там, где они предназначены для повышения удобочитаемости кода.

Смежные вопросы