2017-12-06 1 views
0

파이어와 함께 스파이더 3.2.4를 사용합니다.파이썬 스파이더 : 다른 파일에서 함수를 변경하면 아무 효과가 없습니다.

내가 (다른 파일에서) 함수를 호출하면 내 주 스크립트에서 my_func()를 호출 할 때 해당 함수의 "이전 버전"을 사용합니다. 설명 :

my_func를 변경하고 파일을 저장하면 전체 주 스크립트를 실행하는 경우에만 내 주 스크립트에서 호출하면 새 버전의 함수가 사용됩니다.

(실행 셀을 사용하거나 선택한 행을 실행하여) my_func로 행을 실행하면 my_func의 이전 버전이 변경 사항이 적용되기 전에 사용됩니다.

비록 my_func가 (myOtherFile import my_func에서) "reimported"되어야했기 때문에 그 라인도 실행하려고했지만 변경되지 않은 함수의 이전 버전이 여전히 사용되었습니다.

나는 뭔가를 오해 했습니까, 아니면 정말로 심각한 버그입니까? 내가 스파이더를 닫고 다시 시작하면 (기능의 새로운 버전을 사용한다)하지만 용납 할 수없는 해결책이다.

답변

1

이 동작은 (I) Python 인터프리터가 가져 오기를 처리하는 방법과 관련이 있습니다.

현재 (가능한 솔루션)에 대한 자세한 설명을 찾을 수 있습니다 https://support.enthought.com/hc/en-us/articles/204469240-Jupyter-IPython-After-editing-a-module-changes-are-not-effective-without-kernel-restart

짧은 답변 :
- 중 커널
를 다시 시작 - 또는 importlib.reload (https://docs.python.org/3/library/importlib.html#importlib.reload)
를 사용 - 또는 사용 IPython의 자동 리로드를 확장 (http://ipython.readthedocs.io/en/stable/config/extensions/autoreload.html)

1

(여기에 스파이더 메인테이너) 이것은 버그가 아니며, 파이썬이 작동하는 방식입니다. 그러나 정상 동작은 IPython 마법을 %autoreload로드하기 위해 IPython 콘솔을 사용하여 향상시킬 수 있습니다. 이 변경으로 파일을 저장 한 후 콘솔에 코드가 즉시로드됩니다.

3.2.5 버전 (2017 년 12 월에 출시 예정)에서이 작업을 수행합니다.

관련 문제