Как проверить, был ли импортирован один модуль Python? - PullRequest
44 голосов
/ 17 февраля 2011

Как проверить, был ли модуль импортирован в python?

например мне нужны основы:

if not has_imported("sys"):
   import sys

также

if not has_imported("sys.path"): 
   from sys import path

Спасибо!

Rgs.

Спасибо за все ваши комментарии: код был вставлен здесь. автоматический импорт всех подмодулей в папке, затем запуск функций с одинаковыми именами - Python runtime inspect related

Ответы [ 3 ]

50 голосов
/ 17 февраля 2011

Если вы хотите оптимизировать, не импортируя вещи дважды, избавьте себя от хлопот, потому что Python уже позаботился об этом.

Если вам нужно , чтобы избежать NameErrors или чего-то еще: исправьте неаккуратное кодирование - убедитесь, что вам это не нужно, т.е. определите (импортируйте) все, прежде чем использовать его (в случае если импортирует: один раз, при запуске, на уровне модуля).

Если у вас есть веская причина: sys.modules - это словарь, содержащий все модули, уже импортированные куда-либо. Но он содержит только модули, и из-за того, что from <module> import <variable> работает (импортируйте весь модуль как обычно, извлеките из него все, что вы импортируете), from sys import path только добавит sys к sys.modules (если это не так) т уже импортируется при запуске). from pkg import module добавляет pkg.module, как вы, вероятно, ожидаете.

14 голосов
/ 18 марта 2015

Я чувствую, что принятый ответ не совсем правильный.

Python по-прежнему имеет накладные расходы при импорте одного и того же модуля несколько раз. Python обрабатывает это, не выдавая ошибку , конечно, но это не значит, что это не замедлит ваш скрипт. Как вы увидите из приведенного ниже URL, при многократном импорте модуля накладные расходы значительны .

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

https://wiki.python.org/moin/PythonSpeed/PerformanceTips#Import_Statement_Overhead

8 голосов
/ 26 июня 2015
from sys import modules
try:
    module = modules[module_name]
except KeyError:
    __import__('m')   

это мое решение по изменению кода во время выполнения!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...