Как реимпортировать модуль перед запуском :PymodeRun в python-mode для vim?

Допустим есть два простых открытых в vim файла:
file1.py
value = 'test'
и file2.py
from file1 import value
print(value)

Запускаем :PymodeRun, получаем "test", меняем file1.py
value = 'new test'
сохраняем, переходим в буфер с file2.py, pапускаем :PymodeRun, по прежнему получаем "test".
Если запускать через :python % всё работает нормально.
  • Вопрос задан
  • 164 просмотра
Пригласить эксперта
Ответы на вопрос 1
@dsemen Автор вопроса
Добрался сам
1. Решение "в лоб"
в файле file2.py не используем from и временно добавляем reload:
import file1 as f

import imp
imp.reload(f)

print(f.value)

Кривовато, но работает и не нужно ничего менять в самом python-mode

2. Слегка правим python-mode (сделал у себя)
Находим файл python-mode/pymode/run.py и добавляем пару строк (обрамил строки 37 - 40):
+       m_keys = sys.modules.keys()
37      code = compile('\n'.join(lines) + '\n', env.curbuf.name, 'exec')
38      sys.path.insert(0, env.curdir)
39      exec(code, context) # noqa
40      sys.path.pop(0)
+       for k in set(sys.modules) - set(m_keys):
+           del sys.modules[k]

Написал issue на github.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы