Python: импорт "файла импорта" - PullRequest
12 голосов
/ 01 июня 2011

Я импортирую множество различных сценариев, поэтому в верхней части моего файла он забит инструкциями импорта, например:

from somewhere.fileA import ...
from somewhere.fileB import ...
from somewhere.fileC import ...
...

Есть ли способ переместить все это куда-нибудь еще, а затемвсе, что мне нужно сделать, это импортировать этот файл, так что это всего лишь один чистый импорт?

Ответы [ 2 ]

22 голосов
/ 01 июня 2011

Я настоятельно советую против того, что вы хотите сделать.Вы делаете глобальную ошибку включаемого файла снова .Хотя только один модуль импортирует все ваши модули (в отличие от всех модулей, импортирующих глобальный), остальным моментом является то, что если есть веская причина для того, чтобы все эти модули были собраны под общим именем, хорошо.Если нет причин, то они должны храниться в виде отдельных включений.Причина - документация.Если я открою ваш файл и увижу только один импорт, я не получу никакой информации о том, что импортируется и откуда оно берется.С другой стороны, если у меня есть список импорта, я сразу знаю, что нужно, а что нет.

Также есть еще одна важная ошибка, которую, я полагаю, вы делаете.Когда вы говорите

from somewhere.fileA import ...
from somewhere.fileB import ...
from somewhere.fileC import ...

Я предполагаю, что вы импортируете, например, класс, как этот

from somewhere.fileA import MyClass

, это неправильно.Это альтернативное решение намного лучше

 from somewhere import fileA 

 <later>

 a=fileA.MyClass()

Почему?две причины: во-первых, пространство имен.Если у вас есть два модуля с классом MyClass, у вас будет конфликт.Во-вторых, документация.Предположим, вы используете первый вариант, и я нахожу в вашем коде следующую строку

 a=MyClass()

, теперь я понятия не имею, откуда взялся этот MyClass, и мне придется поискать все ваши файлы, чтобы найтиЭто.Уточняя его по имени модуля, я могу сразу понять, откуда он, и сразу же найти через / search, где в вашей программе используется материал из модуля fileA.

Последнее замечание: когда выскажите "fileA", вы делаете ошибку.Есть модули (или пакеты), а не файлы.Модули отображаются в файлы, а пакеты - в каталоги, но они также могут отображаться в файлы egg, и вы можете даже создать модуль, не имеющий файлов вообще.Это наименование концепций, и это боковая проблема.

7 голосов
/ 01 июня 2011

Конечно, есть;просто создайте файл с именем myimports.py в той же директории, где находится ваш основной файл, и поместите туда свои файлы импортаТогда вы можете просто использовать from myimports import * в своем основном скрипте.

...