Определение типа импорта Python - PullRequest
3 голосов
/ 12 мая 2011

Может ли модуль python определить, был ли импортирован import module или from module import *? Что-то вроде

 if __something__=='something':
      print 'Directly imported with "import ' + __name__ + '"'
 else:
      print 'Imported with "from ' + __name__ + ' import *"'

Спасибо.

Ответы [ 2 ]

4 голосов
/ 12 мая 2011

Нет, это невозможно обнаружить из кода модуля. При первом импорте выполняется тело модуля, и новый объект модуля вставляется в sys.modules. Только после этого запрошенные имена вставляются в пространство имен импортирующего модуля.

При последующем импорте тело модуля даже не выполняется. Так что, если модуль сначала импортируется как

import module

и второй раз как

from module import name

у него нет никаких шансов что-либо сделать во время второго импорта. В частности, он не может проверить, как он импортируется.

0 голосов
/ 06 сентября 2013

Хотя ответ Свенса, вероятно, правильный, и это может показаться немного очевидным, это то, что я действительно искал, когда наткнулся на этот вопрос.

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

import sys

def myfunction(blah):
    return "something like: " + blah

noargs=len(sys.argv)
if noargs>1:
    for i in range(noargs-1):
        print myfunction(sys.argv[i+1])

Однако, Эмилио, это на самом деле не поможет, если у вас нет входных аргументов. :)

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