ПРИМЕЧАНИЕ : я не принял ответ, потому что мой реальный вопрос - почему он помечается как ошибка компиляции. Я проголосовал за ответ @TorelTwiddler, потому что он дал обходной путь, но я хотел бы понять проблему.
У меня есть простой модуль, который содержит код для самопроверки. Для облегчения использования в интерактивном сеансе код самопроверки перезагружается (модуль).
Это нормально работает как в PyDev (RunAs), так и в интерактивном окне (после ручного изменения sys.path
и импорта); но PyDev IDE все еще выдает ошибку 'compile' / red-X в строке
import Mod1
Причина, по которой я import Mod1
сама по себе, заключается в том, что имя должно быть разрешено в любом контексте, в котором выполняется Test()
, чтобы перезагрузка прошла успешно. Например, если вы импортируете MyMain
из нового интерактивного окна, вызов reload
завершится неудачно без импорта, поскольку имя Mod1 неизвестно.
Есть ли способ, как я могу это исправить? Mod1
является частью гораздо более крупного проекта, и его постоянная пометка как некомпилирующая делает разработку более сложной ...
Модуль с проблемой:
# Mod1.py
def Test():
"""
run the self-test, but first force a reload of the module under test (this mod)
"""
import Mod1 # *****'COMPILE' ERROR HERE******
import imp
Mod1 = imp.reload(Mod1)
TestImpl()
def TestImpl():
"""
self test here
since I reload above, I can change this code and re-run from an interactive window
this has to be a seperate function for the reload in Test to have an effect on this code
"""
print(input("enter"))
Дополнительный модуль начальной загрузки, используемый только в PyDev (так что я могу «запустить как»)
# MyMain.py
import Mod1
Mod1.Test()
PyDev / Project PYTHONPATH (отображается правильно, эта папка находится в корне моей рабочей области). Так как он действительно работает в PyDev, он определенно правильный?
/MyDirectory
Спасибо!