2010-10-25 2 views
0

Я хочу установить стандартный файл сценария, который импортируется в python при запуске, используя переменную среды PYTHONSTARTUP. Кроме того, я хочу иметь возможность удобно перезагрузить один и тот же файл сценария после его изменения во внешнем редакторе, чтобы проверить его поведение после изменения. Я создал ~/.pythonrc.py файл и установить его в качестве PYTHONSTARTUP:Используйте PYTHONSTARTUP для интерактивного тестирования файла python в интерпретаторе

import os 
import imp 

def load_wb(): 
    _cwd = os.getcwd() 
    os.chdir(os.path.join(os.getenv('HOME'),'Skripte')) 
    import workbench 
    imp.reload(workbench) 
    os.chdir(_cwd) 

load_wb() 

Это мой самый минимальный файл сценария для запуска:

def dull_function(): 
    print('Not doing much...') 

print('Workbench loaded.') 

При запуске Python 3.1.2, .pythonrc успешно выполняется, и файл workbench.py ​​импортируется, но dull_function не отображается в глобальном пространстве имен или в локальном. Что мне делать по-другому?

+1

Вы пробовали 'workbench.dull_function'? – rubik

+0

workbench.dull_functuion дает имяError. Это неудивительно, так как ни одно рабочее место, ни dull_function не появляются в пространстве имен, указанном dir() после импорта. imp.reload (workbench) возвращает объект модуля. Есть ли способ связать этот объект вручную с глобальным пространством имен? – neradis

ответ

0

Переведите инструкцию import вне функции. Вы в основном импортируете модуль workbench в область функций, а не глобальную область (попробуйте позвонить workbench.dull_function изнутри load_wb, чтобы убедиться сами).

Другими словами, изменить ваш код:

import os 
import imp 
import workbench 

def load_wb(): 
    _cwd = os.getcwd() 
    os.chdir(os.path.join(os.getenv('HOME'), 'Skripte')) 
    imp.reload(workbench) 
    os.chdir(_cwd) 

load_wb() 
0

Не реально решить вашу проблему, но сразу же ... Вы могли бы оценить с помощью IPython оболочки для тестирования в этом случае. Используя функцию autoimport, вы можете пометить модуль для (re) загрузки по каждой выполненной строке, если это необходимо.

Это означает, что вы можете %aimport workbench, а затем каждый раз, когда вы запускаете some_function_Im_testing(), workbench будет перезагружен, если он изменится. Просто добавьте строку autoimport в файл конфигурации для ipython, и все готово.

Смежные вопросы