Как определить функцию, которая импортирует модули

#python #function

#python #функция

Вопрос:

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

     import from user *
    setup()
    #setup is the function which imports the modules
  

Однако всякий раз, когда я пытаюсь это сделать, это просто не работает. попытка вызвать модули, определенные в программе установки после того, как я запустил функцию, приводит только к ошибке, в которой говорится, что модули не установлены.

Вот код в моем модуле:

     def setup():
        import keyboard, win32api, win32con
  

Дайте мне знать, если есть какая-либо дополнительная информация, которую я могу предоставить, и спасибо за любую помощь.

Ответ №1:

Обычно хорошей идеей является явный импорт имен в ваш модуль там, где они вам нужны, чтобы вы могли видеть, откуда что берется. Явное лучше, чем неявное. Но для интерактивных сеансов иногда может быть полезно импортировать множество вещей одновременно, так что…

Ваша проблема в том, что ваш setup метод импортирует эти модули в свое собственное пространство имен, которое недоступно вне функции. Но вы можете сделать что-то гораздо более простое. Если ваш user модуль только что содержал:

 import keyboard, win32api, win32con
  

Затем в вашем интерактивном сеансе вы могли бы сделать:

 >>> from user import *
  

Затем эти модули должны быть доступны в пространстве имен вашего сеанса.

Ответ №2:

Я думаю, что у вас возникла проблема с областью действия, если setup определен в каком-либо другом модуле, импорт будет действителен только в этом модуле (или, возможно, только в функции, которую необходимо будет протестировать).

В общем, я бы счел неправильной политику «импортировать все, что возможно необходимо». Ваш код должен импортировать только то, что ему действительно нужно. Зависимости лучше свести к минимуму и явно.