«Предварительный импорт» переменной в модуль - PullRequest
1 голос
/ 18 января 2010

Python новичок здесь, поэтому я прошу прощения, если на этот вопрос есть простой ответ. (Я надеюсь, что это так.)

Я работаю над модулем Python - плагином для более крупной программы. Я пытаюсь разработать модуль, используя Eclipse IDE (с pydev), что означает, что я должен иметь возможность запускать этот модуль автономно, то есть не как плагин от более крупной программы.

Я на самом деле сам разобрался со многими волосатыми деталями, большая часть которых заключалась в создании своего рода "жгута", который запускает плагин из моей IDE способом, который имитирует (с точки зрения плагина) запускается изнутри его реальной операционной среды.

Но одна вещь ускользает от меня. Когда модуль запускается из «реальной» среды, он каким-то образом имеет определенное имя (назовите его «Bob»), уже определенное в его результатах dir (). Когда я запускаю его в собственной среде, «Bob» не появляется в dir (), если я не загружаю его вручную.

Естественно, если я написал код для загрузки «Bob» вручную, просто чтобы плагин работал в моей IDE, это мешает плагину, когда он работает «по-настоящему». С чем мне нужна помощь: как мне запустить плагин (через мой стартовый комплект) с уже загруженным "Bob"?

Наивно, я вроде как надеюсь как-то "заставить" плагин каким-либо образом импортировать "Боб", без необходимости фактически добавлять "импорт Боба" в сам плагин. Но я открыт для предложений о лучшем способе ...?

1 Ответ

2 голосов
/ 18 января 2010

Предположительно, когда вы запускаете его "автономно" в Eclipse (или, в этом отношении, "автономно" без Eclipse, просто как "python foobar.py" в приглашении оболочки), ваш модуль __name__ global переменная имеет значение '__main__' (если модуль будет импортирован, вместо этого значение глобальной переменной будет 'foobar' - или, тем не менее, с именем модуля).

Итак, просто сделайте

if __name__ == '__main__':
    import Bob

и вы можете импортировать Боба, когда ваш модуль работает автономно, без каких-либо побочных эффектов, когда вместо этого ваш модуль получает import ed.

...